RubyCocoaとMacRubyを比較

早速MacRubyを試してみました。まずは定番の簡単電卓をRubyCocoaで作ってみました。

RubyCocoaの場合

class CalcRubyCocoa < OSX::NSObject
ib_outlet :text1, :text2, :label
def keisan
p “Clicked"
a = @text1.stringValue.to_i
b = @text2.stringValue.to_i
c = a+b
p c.to_s
@label.setStringValue(c.to_s)
end
ib_action :keisan
end

Objective-C流儀のib_outletとib_actionに記入されているキーワードがインターフェイスビルダとの橋渡しをします。

Class名の横に< OSX::NSObject とあるのが印象的ですね。

ちなみに、keisanメソッドの中にある@マーク付きのインスタンス変数。@をとっちゃうと即エラーが発生します。

MacRubyの場合

class CalcMacRuby
attr_accessor :text1, :text2, :label
def keisan(sender)
p “Clicked"
a = @text1.stringValue.to_i
b = @text2.stringValue.to_i
c = a+b
p c.to_s
@label.setStringValue(c.to_s)
end
end

こうなります。

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のアプリケーションにするにはどうすればいいか、そういう練習をしていくとマスターの近道になりそうです。

がんばりまっす。

RubyによるMac OS 10デスクトップアプリケーション開発入門
この本欲しいんだけれど高くて躊躇してます・・・