心はいつも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
iPhoneのKindleアプリでChip Conley氏の本を読んでみました。その1

GWで電子本も文庫本も読み終え、「新しい本に入れ替えないと~」と思いながらすっか …

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

MacOS 10.8.5(Mountain Lion)にRuby&Ru …

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

6.2.2プレゼンスを検証する、です。いよいよモデルにコードを書いていきます。 …

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

7.1.2ユーザーリソース、です。 /user/newを/signupで表示させ …

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

7.6演習 1問目です。 リスト7.30のコードを使用して、7.1.4で定義され …

吉瀬美智子さんが美しすぎて、新サイト作りました

以前からやりたいと思っていたのですが、吉瀬美智子さんが美しすぎてやる気がでました …

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

9.1.2編集の失敗、です。 テストを書きます リスト9.9 ユーザーupdat …

no image
booknest使ってみました

先日、日本サムスンのデザイナー、吉田道生氏のお話をお伺いしました。 非常に興味深 …

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

10.3.3フィードの原型、です。 仕様の確認 ユーザーログイン後、トップページ …

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

11.2フォローしているユーザー用のWebインターフェイス、です。 モデルができ …