10

去年の夏から書いていた本がやっと出ます(「世界一わかりやすいObjective-Cプログラミングの授業」)。

世界一わかりやすいObjective‐Cプログラミングの授業

世界一わかりやすいObjective‐Cプログラミングの授業

[rakuten:book:14341694:detail]

Objective-Cと言えば、NeXTstepの主要な開発言語に採用され、それがそのままMac OS Xに引き継がれ、いまではiOSの開発言語にもなったプログラミング言語です。iOS、つまりiPhoneiPadiPod touchのアプリケーションを作るときに使われる言語です。ある意味、流行りものの言語かも知れません。

で、この本なのですが、最初に断っておきますが「この本を読み終わるとiPhone(iPadでもiPod touchでもいいですが)のアプリケーションが作れるようになる」というものではありません。おもに言語とライブラリのより基礎的な部分を解説している本です。iOSアプリケーションの入門書はいくつか出ていますが、ページ数の都合でしょう、たいていの本は基本的な部分をかなり端折っています。それに対して、Objective-Cの基本的な部分の入門書、というのが本書の位置づけです。

本書は「世界一わかりやすい〜プログラミングの授業」シリーズの1冊です(「世界一わかりやすい」というのはアレですが、私が命名したわけじゃなので……と言い訳しておきます)。このシリーズは基本的には見開き2ページで1テーマ、左ページは(会話での)解説とコード、右ページは手書き風の図になっています。本書もこのフォーマットを踏襲しています。

左ページの解説は段組(2段)してあります。ですので1行の文字数はかなり少なくなってしまっています。でもって、Objective-Cのクラス名やメソッド名(特にメソッド名)はすごく長いものがあります。たとえばwriteToFile:atomically:encoding:error:やcreateDirectoryAtPath:withIntermeditateDirectories:attributes:error:なんていうメソッドがあったりして、クラス名やメソッド名の途中で改行されないように1行に収めるのにかなり苦労しました。

だいたにして、なんでこんな長いメソッド名になるのかというと、それなりに理由があって、メソッドを呼び出す式の、特に引数の書き方がC++Javaとはかなりちがっているからです。たとえばcreateDirectoryAtPath:withIntermeditateDirectories:attributes:error:というメソッド、メソッド名を見ればわかるように(ファイルシステムの)ディレクトリを作成するメソッドです。このメソッドを呼び出してディレクトリを作成するには、たとえば次のように書きます。



[fm createDirectoryAtPath:@"/Users/lepton/aaa/bbb/ccc" withIntermeditateDirectories:YES attributes:nil error:NULL];

なにやら怪しげな書き方です(C++Javaに慣れている人にとっては)。Objective-Cのメソッド呼び出し(と言うか「メッセージ送信」と呼ばれる)は、C++Javaのように「オブジェクト.メソッド(引数)」のように書くのではなく、「[オブジェクト メソッドと引数]」と書きます(まあ正確に「[レシーバ メッセージ]」と書くべきなのですが)。上のメソッド呼び出しでfmはオブジェクトを表しています。これはNSFileManagerクラスのインスタンスです。このNSFileManagerクラスにcreateDirectory〜(長いので後略)メソッドががあります。ここはあまり問題は無いかと思いますが、メソッドを呼び出している部分が問題です。C++Javaならば「メソッド名(引数並び)」のように書くわけですが、Objective-Cではメソッド名のコロンの後ろに引数を(1個)書きます。ですから、メソッド名に含まれるコロンの数だけの個数の引数があることになります。でもって、コロンの前の部分、たとえば「AtPath」とか「withIntermeditateDirectories」とかが引数の意味を表すことになるわけです。そんなものがついてくるために、特に引数の多いメソッドの名前は長くなってしまうわけです。

というような話は本書を見ていただくこととしまして(←営業)、とりあえず新しい本が出ます、というご報告でした。

そうそう、今回のタイトルの「10」、この本が、私が(Leptonという名前で)出した10冊目の本だからです。せっかくなので並べてみました。