« やるじゃないか WWDR | トップページ | ObjectiveBasic »

2006.11.07

RubyCocoa で Objective-C の型情報をどういうスタイルにする?

ひ日誌 11/03 の「addRubyMethod_withType の構文糖」に反応。

リンク先での主題ではないけれど、型エンコードを使うのって、そもそもどうなんだろう。今は裏道的な扱いだけれど、オープンにガンガン使うには型エンコードってわかりにくいと思うのだ。

たとえば例に挙がっている

 def foo_bar(view, index)
 end
 objc_form 'foo:bar:', '@@:@I'

は、こんなほうがよいだろう。

 objc_form 'foo:bar:', 'NSObject *', 'NSView *', 'int'
 # seems -> -(NSObject *) foo:(NSView *)aView bar:(int)index
 # or
 objc_form 'foo:bar:', 'id', 'id', 'int'

冗長ではあるけれど、コードを書く人にも読む人にもこういった形式のほうがやさしい。型エンコードを利用した設定も objc_form_ocencode とか長い名前のメソッドで利用できてもよい。

おそらく BridgeSupport の機能を利用して parse できるので、それを利用すれば処理も簡単にできるし、さらに BridgeSupport に登録もできるので型変換が正確に行われる。

ここでのポイントは、

  • 型情報には Cの型をそのまま使う
  • レシーバとセレクタは省略する

つまり、結果的に Objective-C のメソッド定義と同じように書けるっていうこと。

Rubyの型を定数的に利用する、こういうのもありかも。

 objc_form 'foo:bar:', OSX::NSObject, OSX::NSView, Integer

|

« やるじゃないか WWDR | トップページ | ObjectiveBasic »