Objective-Cを使ってみる

Tsukasa OISHI

ひょんなことからObjective-Cの勉強をちょっとしてみた。
最初はMacがないと使えないと思っていたのだけど、gccでコンパイルできることがわかった。すばらしい。

sudo aptitude install gobjc

環境構築はこれでOK。あとはgccかけるときに-lobjcをつけてあげます。

gcc test.m -lobjc

こんな感じ。Objective-Cのファイル名の拡張子はmだそうです。

Objective-Cは基本的にC言語みたいです。変な記法でオブジェクトが使えるようになったC言語。
たとえばRuby

class Tsukasa < Oishi
  def say
    puts "hello, world!"
  end
end
a = Tsukasa.net
a.say

というようなコードがあったとき、Objective-Cでは

#import <stdio.h>
#import <objc/Object.h>

@interface Tsukasa : Oishi
- (void)say;
@end

@implementation Tsukasa
- (void)say {
  printf("hello, world!\n");
}
@end

int main(void) {
  id a = [Tsukasa new];
  [a say];
}

と書きます。同じクラスを2回書いているように見えますが、@interfaceのところはクラスの宣言で、@implementationでメソッドを実際に定義します。メソッド名の前のカッコは返り値で、その前の「-(マイナス)」はインスタンスメソッドであることを示しています。クラスメソッドのときは「+(プラス)」を使います。
実際にメソッドを呼び出すとははかぎ括弧で指定します。最初にレシーバを書いて、次にメソッドと引数が続きます。
idというのはインスタンスを表しているObjective-Cの型で、基本的にはvoid*みたいなものだそう。だから、

  Tsukasa * a = [Tsukasa new];

と書いてもOKなのです。
書き方がちょっと変だけど、C++よりはとっつきやすそうです。もっといろいろ勉強してみよう。