心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

詳解 Objective-C 2.0 第3版 CHAPTER2 Objective-Cのプログラム

      2014/05/11


Objective-Cの解説はメッセージから始まる。このメッセージという概念、もともと通信系システム出身の私にとってはわかりやすい。メッセージをうけとったらインスタンスが生成するという考え方。一般のObject指向言語でもメッセージをインスタンス生成の契機という形で受け取ってはいるけれど、メッセージの実態として意識することはあまりない。これは Objective-C がGUIもの、つまり人が考えて操作するという特性を持つがゆえだと思う。

02-01 オブジェクトとメッセージ

p18
オブジェクトはidという型を持つ。
id obj;

オブジェクトにメッセージに送る事は
[obj msg]の形式で書く。objがオブジェクト名でmsgがメッセージキーワード。

Objective-Cにやたら[]が出てきてキモチワルイのはこのせいだ。[]は配列じゃない。いや配列でも使う。
メッセージ式を配列の添字として書くと、
element = table[[obj msg]];
とキモチワルイ字面になる。なれるしか無い。elementが変数名。table[]が配列、[obj msg]がメッセージ、この場合は配列の添字として使っている。

続けざまにメッセージを送ることを書くと
[[[obj msg1]msg2]msg3];
なんともゆんゆん感がでてキモチワルイ。ここまで重ねると送っている感が出る。

メッセージは引数を持つ事ができる。メッセージ式の後に:で引数をつける。
[doc isSameDirectory:[info objctAtIndex: ++num]];
doc isSameDirectoryメッセージの引数が[info objctAtIndex: ++num]]という引数をもつメッセージの形になっている。

引数が2つ以上あるときは:で区切る。

cell = [albumview cellAtRow:i clumn:j];

p21
インスタンスの生成はオブジェクトにメッセージを送ることでできる。
[[クラス名 alloc] init]
他の方法で生成することもできるが、とりあえずallocしか書いてない。

p22
02-02 クラス定義
Objective-Cでは、クラスは、
・インターフェース部
・実装部
に分けて書く。

インターフェース部は
@interface クラス名:スーパークラス名
{
インスタンス変数の宣言;
}
メソッドの宣言;

@end

という構文。
ミソは、メソッドの宣言だけで処理は書かなくてもいいってこと。
えースーパークラスもいちいち書くんだって感じ。

インスタンス変数の宣言はC言語ごとく
 型 変数名;
で書く。Rubyみたいにいきなり変数名かいちゃダメ。

メソッドの宣言は、引数が無い場合は、

– (id)delegete;

と書く。メソッドの宣言っぽく見えない字面的に。

– (返り値の型)メソッド名;

ですね。

引数は、やはり:で区切って渡す。複数渡しも可。

– (id)cellAtRow:(int)row column:(int)col;

rowとcolは仮引数だってことはわかるけど、columnはなんぞや??
=>第2引数のメッセージキーワードだって。で、このメソッド名は cellAtRow:column:になる。

p24
クラスの実装部は、
@implementation クラス名
メソッドの定義
@end

メソッドの定義は、インターフェース部で宣言したメソッドの実処理を書いて行く。

p26
クラス定義(インターフェース部と実装部)の例が書いてある。List2-1,2-1
クラス1個の例なので、このままでは起動することができない。

p27
起動させるにはmain関数が必要。

main関数は独特だ。事あるごと(ユーザーがGUI操作するたびに)呼ばれると思うんだけど、都度メッセージを判定して該当の処理を行う、caseとかwhenとか書いていないけどそういう条件分岐的な処理をしている。

List2-3

p28
02-03 コンパイル
ターミナルからコンパイル、実行する方法が紹介されている。おお!

clang voltest.m -framework Foundation

a.outという実行ファイルができる。
実行するには

./a.out

 - テクニカル

Comment

  1. […] 詳解 Objective-C 2.0 第3版Posted on 2014年5月6日 詳解 Objective-C 2.0 第3版 CHAPTER2 Objective-Cのプログラム Posted on 2014年5月8日 詳解 Objective-C 2.0 第3版 CHAPTER3 継承とクラス Posted on […]

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

no image
RailsTutorial4.0を高速で復習する。6.5章。

演習1問目。 リスト6.20の、メールアドレスを小文字に変換するコードに対するテ …

no image
Homebrewをインストールする。

MacOS 10.8.5(Mountain Lion)にRuby&Ru …

no image
RailsTutorial4.0を高速で復習する。5.6章。演習2問目のつづき。

5.6章。演習2問目です。TDDにこだわり、あえてこの問題をするまで、ヘッダーや …

no image
wordpressのサーバー移行したい

本当に自分の備忘録として。 サーバー移行したいなと考えています。 同時に、Wor …

no image
rbenvとruby-buildのインストール

諸々のものをインストールしたら、次はHomebrewを使ってrbenvとruby …

Chromeでの文字化けを対処しました。

WordPressで自作テンプレを作ってみたのはよいものの、困った問題が2つ。 …

attr_accessorでRuby文法を噛み締める

作りたいwebアプリがあって、プログラムやろう!となって現在にいたってる訳です。 …

no image
あんたのrakeは新しいけど古いのが必要なんだよっ!!と怒られた

Mavericksってrubyが2.0になったんですね。 てのはおいといて、 r …

no image
railsのエラーメッセージを日本語化

message:で渡すエラーメッセージや、その他いろんな箇所を日本語化します。 …

RailsTutorial4.0を高速で復習する。8章。

仕様の探求 userモデルには、登録と認証、承認に必要なモデルは既に作ってありま …