なぜ Objective-C は気持ち悪いのか – 見た目編

iPhone OS 向けのアプリケーション開発で注目を浴びている Objective-C 言語ですが、Objective-C についてあまりいい噂を耳にしないので、なぜそうなってしまうのかという分析をしてみることにしました。記事が長くなりそうだったので、今回は見た目編です。

1. 見た目

プログラミング言語において、見た目というものは重要な要素のひとつです。Objective-C 言語はオブジェクト指向言語でありますが、実際のコードをみてみると、ほかのメジャーな言語とはちょっと違った構文がとられています。

メッセージ式

Objective-C では、メソッド呼び出しをメッセージ式で記述します。以下は、anObject に message というメッセージを送る例です。

[anObject message];
[anObject message:arg1];
[anObject message:arg1 withObject:arg2];

順に、引数0,1,2個の場合の書き方です。はじめて見られた方はピンとこないかもしれませんので、簡単にメッセージ式の説明をします。Objective-C においてメソッド名は、message の部分にあたります。引数がある場合は、そのあとに : で区切って引数を指定します。

問題は第2引数以降です。Objective-C では、引数にラベルと呼ばれる名前を付けます。したがって、第2引数以降は、”ラベル : 引数” といったように記述します。上の例では、”withObject:arg2″ が第2引数にあたります。

当然疑問は持たれるでしょう。なぜ引数にラベル名と引数の変数名を付ける必要があるのか。特に、ラベル名の意味が気になるかと思われます。Objective-C では、メソッドのオーバーロードが存在しないため、オーバーロードしたい場合には、第2引数以降のラベルによって区別するわけです。ちょうど、上の例のような感じです。また、ラベル名は全く意味のないものではなく、引数の説明の役割を果たしますので、慣れてくるとドキュメントを見なくとも、第2引数以降の意味がわかるようになってきます。

引数ひとつひとつにラベルと呼ばれる名前を付ける Objective-C は、それだけで十分に気持が悪いと言っていいレベルでしょう。最後に、参考までに rangeOfString メソッドの例を載せておきます。

[@"abcdabcdabcd" rangeOfString:@"c" options:NSBackwardsSearch range:NSMakeRange( 4, 9 )];

文字列から特定の文字列を探すメソッドです。この例では、”abcdabcdabcd”という文字列から、”c”という文字列を後ろから検索しますが、検索範囲は4文字目から9文字分の範囲に設定しています。

名前

Objective-C が気持ち悪い理由として、名前を極力省略しないというものも上げることができるのではないでしょうか。例えば、NSString の次のメソッドを見ましょう。

[aString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

これは、文字列をURLエンコードするメソッドです。やや特殊なケースだと思われる方も居られるでしょう。しかし、単に文字列を結合するメソッドは、次のような名前です。

appended = [aString stringByAppendingString:append];

よく使いそうなメソッド名さえ、丁寧な名前の付け方がなされています。

引数のラベル名との相乗効果で、よりいっそうコード量が増えそうです。

次は、クラス定義の気持ち悪さについて語ります。

コメント

  1. [...] objective-cはなぜ気持ち悪いのかという記事を発見しましたw 納得。納得。。 [...]

  2. [...]   以上     参考 visible true: Java脳でもわかるObjective-C入門 こたつつきみかん なぜ Objective-C は気持ち悪いのか 見た目編 iPhoneアプリケーション開発: Objective-Cのメソッドについて [...]

コメント投稿