Objective-C学習中

iPhoneアプリ開発の関係でObjective-Cに手をつける。
今のところの情報はこの辺り。
エンジニアからの情報を直でもらっている部分もあるので、正確性は保証しない。

  1. iPhoneSDKMac限定。Windowsでは開発できない
  2. iPhoneにはガベージコレクタが無い
  3. iPhoneではObjective-C++ではなくObjective Cが主体
  4. Objective-C自体はC言語と完全な互換性があるため、Cのコードがそのまま使える
  5. Objective-CはCに特殊な記述方式を追加したような簡単な言語
  6. Objective-Cのビルドはgccでも出来るが、Objective-C 2.0をgccがまだサポートしていないので、プロパティ等が使えない
  7. gccを使えばObjective C自体はLinuxWindowsでも開発可能


結構はまったのがObjective-C 2.0がgccで使えなかったこと。
正確にはLeopardgccならコンパイル出来るんだが、Ubuntuではオプションが足らないだけの可能性もあるが、コンパイルできなかった。
ちなみにUbuntu 8.10では下記で書かれているような「gcc-objc」ではなく、「gobjc」がapt-getのパッケージ名だったのも少し戸惑った。他はさして問題なく。
http://www.oklab.org/program/objective-c_linux.html


Objective-Cの入門は下記を参考にした。
http://wisdom.sakura.ne.jp/programming/objc/index.html
一通りここで基本抑えて、あとはiPhone用ということでAppleに飛ぶ。
http://developer.apple.com/jp/Documentation/Cocoa/Conceptual/ObjectiveC/index.html?http://developer.apple.com/jp/Documentation/Cocoa/Conceptual/ObjectiveC/Introduction/chapter_1_section_1.html
NOとYESの大文字小文字や、Nilnilの相違などにちょこちょこはまったりすることもあるがC、C++を一通り抑えている人間なら普通に習得できる。


文法はシンプルでいいんだが、二つほど閉口した。

  1. @implementation という記述の長さ
  2. メソッドの引数にラベルつけなきゃいけない点
@implementation className

1つ目はクラス定義時にこう書くんだが、単純に「@implementation」という単語が長すぎ。いくらでもやりようあるとは言え、よく使うキーワードが長いというのはものぐさな私にとっては苦痛。先頭にアットマークつけるだけでそれが特殊文法だというのはわかるのに、こんなに長くする必要性があったんだろか。


もう一つはこれ。

+ (returnType)methodName:(arg1type) arg1Name arg2Label:(arg2Type)arg2Name {

「arg2Label」の点。メソッドの引数には名前以外にラベルと呼ばれるものをつけなければいけない。
ラベルをつける = 呼び出し側をわかりやすくするという意味がある、と主張する人もいるしそれもわかるが、じゃあ別に引数の名前そのまま使えばいいんじゃないのという気がする。
Railsはそういうところが上手くて規約を使いながら効率化していったんだが、Objective-Cは思想と自由度の狭間で揺れている感じで中途半端な気がする。だからこういう風に、「有効ですが望ましくない形式」が書けてしまう。
http://developer.apple.com/jp/Documentation/Cocoa/Conceptual/ObjectiveC/Articles/chapter_950_section_10.html#//apple_ref/doc/uid/TP30001163-CH3-TPXREF106


まあ、文法はシンプルでわかりやすいんで、上記2点を除けばさして不満なし。
さて、諸事情であまり詳しくかけないんだが、画像をうにゃうにゃするプログラムをこのObjective-C君でさくっと書くとしよう。