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 件のコメント:
コメントを投稿