RubyCocoaとMacRubyを比較
早速MacRubyを試してみました。まずは定番の簡単電卓をRubyCocoaで作ってみました。
RubyCocoaの場合
class CalcRubyCocoa < OSX::NSObjectib_outlet :text1, :text2, :labeldef keisanp “Clicked"a = @text1.stringValue.to_ib = @text2.stringValue.to_ic = a+bp c.to_s@label.setStringValue(c.to_s)endib_action :keisanend
Objective-C流儀のib_outletとib_actionに記入されているキーワードがインターフェイスビルダとの橋渡しをします。
Class名の横に< OSX::NSObject とあるのが印象的ですね。
ちなみに、keisanメソッドの中にある@マーク付きのインスタンス変数。@をとっちゃうと即エラーが発生します。
MacRubyの場合
class CalcMacRubyattr_accessor :text1, :text2, :labeldef keisan(sender)p “Clicked"a = @text1.stringValue.to_ib = @text2.stringValue.to_ic = a+bp c.to_s@label.setStringValue(c.to_s)endend
こうなります。
Class名の横についていた < OSX::NSObject が必要なくなりました。
それに先程のib_outletとib_actionもありません。
かわりにRubyの本には必ず登場するattr_accessor で変数を設定しています。これのおかげでインスタンス変数を外部から利用できるようになっています。
そのためか、メソッドの中にある@マークを3つとも外しても動作しました。
ついでにした発見は def keisan(sender)の(sender)は、RubyCocoaではつけなくても動きますが、このプログラムでMacRubyでは必須だったこと。
ib_actionがないことが関係あるのかもしれません。
メソッド名がそのままアクション
そして驚きが、これ。
気がつきました?
普通 ib_actionに書いて初めてReceived Actionsに表示が現れそうなもんですが、これが必要ないMacRubyでは、def ◯◯に書き込んだメソッド名がそのままアクションになってます。同じ名前を分けて書かなくて良いので一対一の関係ですっきりボタンなどに対応させてプログラムを走らせられるって、初心者の私にはとっても感激!!
プログラムもすっきり、教科書どおりに書けて、本で紹介されているRubyのプログラムをMacのアプリケーションにするにはどうすればいいか、そういう練習をしていくとマスターの近道になりそうです。
がんばりまっす。
この本欲しいんだけれど高くて躊躇してます・・・
ディスカッション
コメント一覧
まだ、コメントがありません