Butinekoの世界 iPhone SDKの開発に入る前に読んでおきたい日本語の資料(開発ツール編)
経由で知りました。HDMTの木下誠氏によるアップルのcocoaセミナーの資料。ダウンロードはここから。
Documentation 日本語に翻訳されたドキュメントです。
とりあえず今回は「初級編」の資料をじっくり読んでみた。まあObjective-Cのソースは見慣れない記号が多くて([]とか-とか@とかがどうしてここにある?という感じで)私には読みづらいわけですが基本はCなので、簡単なものならなんとかついていける。
で・・・この電卓のサンプルをMacRubyで書きなおせばいいんじゃないの?と考えました。それができるなら、楽しいだろう、と。
しかしソースを読むと、のっけから
- (id)init {
Calculator/CalcController.m
self = [super init]; if (self) {
value = 0; operation = OpNone; numberEntering = YES;
} return self;
}
ってrubyのclassのinitなんか書いたことないぜ、というレベルなので非常に不安になる。(はいはい、その程度ですよ私は)ただ、MacRubyにはサンプルがたくさん用意されているので、そちらで多少調べてみると、こんなふうに書きなおせばいいらしい。def init super @value=0 @operation=OpNone @numberEntering = true self end「super」って何?(ボソッ)
ま、とりあえずこれで大丈夫みたい。(^^;)わからないことは後でゆっくり調べよう。思いついたことを実行にうつすときはスピードも大事なので、やれそうだ、という時はさっさと作業したほうがいい。
で、リソースもセミナー資料の通りに作って、アウトレットとアクションの接続をするために骨組みだけソースを作ったのが下の画像。
ちょっと資料に比べると電卓君がかっちょ悪い感じがする。センス無いからなあ。で、あとはアクションにあたるdefを地道に移し替えていく。
できあがったソースがこうなりました。
class CalcController < NSWindowController
attr_accessor :textField
OpNone=0
OpPlus=1
OpMinus=2
OpTIme=3
OpDivid=4
def init
super
@value=0
@operation=OpNone
@numberEntering = true
self
end
def clear(sender)
textField.setStringValue("0")
@value=0
@numberEntering = false
end
def divide(sender)
self.calculate
@operation=OpDivid
@numberEntering=false
end
def equal(sender)
self.calculate
@operation=OpNone
@numberEntering=false
end
def minus(sender)
self.calculate
@operation=OpMinus
@numberEntering=false
end
def number(sender)
s_number=sender.title
old_number=textField.stringValue
if @numberEntering
new_number=old_number+s_number
else
new_number=s_number
end
textField.setStringValue(new_number)
@numberEntering=true
end
def plus(sender)
self.calculate
@operation=OpPlus
@numberEntering=false
end
def time(sender)
self.calculate
@operation=OpTIme
@numberEntering=false
end
def calculate
enterValue=textField.stringValue.to_i
case @operation
when OpNone then
@value= enterValue
when OpPlus then
@value += enterValue
when OpMinus then
@value -=enterValue
when OpTIme then
@value *= enterValue
when OpDivid then
@value /= enterValue
end
textField.setStringValue @value.to_s
end
end
うーん、Objective-Cより短く書けてるかも。
ちゃんと意図したとおりに動きます。かなり打ち間違えたところがあって、相変わらず時間がかかっております。
一番自分でも笑っちゃったのがclass CalcController < NSWindowController
の「<」を「>」って入力してたことですね。呆れました、さすがに。こんなひどい間違いをしてもXcodeの「ビルド」では文句を言われません。実行したら「コード1で終了」という見慣れたエラーがでるので、あとはターミナルから直接実行してみて、MacRubyが何と言って怒っているかを確かめる、というなかなか泣けるdebug環境です。こういう時こそtestなんでしょうねえ。でもいっぺんに勉強する時間がないぞ。こうやって、Objective-CのソースをMacRubyで書き換えていくという作業、自分にはとっても勉強になります。しばらくこれでいけそうかも。なにより、rubyの書き方の勉強にすごーくなってます。実際に動くコードを作れるのもうれしいし。XcodeやInterfaceBuilderにも慣れてきたし。InterfaceBuilderの挙動はMacらしく、洗練されてますね。VisualStudioの似たような機能とは大分ちがうような気がする。(いや、かなり昔ですからね、VS使ってたの)
5日目もあるかもしれません。

0 件のコメント:
コメントを投稿