こんなに違う? AndroidとiOSの開発流儀
iPhoneやiPadのOSとして知られるiOS.Androidとの違いは意外とあります.本コラムでは,これらを,開発者の視点から考察してみます.
●iPhoneとAndroid
iOSとAndroidは同じスマートフォン向けOSが出自ということもあり,よく比較されます.AppleはiPhoneのタブレット版ともいえるiPadで成功を収め,iOSがスマートフォン以外にもターゲットを広げました.現在,Androidも負けじとAndroid 3.0(Honeycomb)でタブレットの分野に打って出ています.両社は共によきライバルとして,いまこの瞬間も,そしてこれからも競い合う関係です.
しかし,その人気を二分するプラットホームの違いは,開発者以外はよく分からないというのが実情ではないでしょうか? 両方を開発している人ならば,日々いろいろと感じるところは少なくないでしょう.けれども,iOS開発者にとってAndroidは謎です.同じくAndroid開発者にとってもiOSは謎です.ましてや,両方ともまだ未体験でこれから学ぼうとされている方や,どちらから手をつければよいか検討中の方々にとっては,より一層不可解なものだと感じるでしょう.そこで,本章では,筆者が両方使ってみて感じるところを,独断と偏見で思いつくままに論じてみます.
●JavaとObjective-C
Androidは基本的にJava言語で開発しますが,iOSはObjective-Cというあまり聞き慣れない言語を用います.これは,Mac OSの開発者以外にはなじみが薄いのではないでしょうか.その名前の通り,C言語の亜種ともいえる言語ですが,古来の由緒正しいオブジェクト指向言語Small Talkの流れをくむ,メッセージ機能を持つオブジェクト指向言語です.
C言語ベースでオブジェクト指向言語というと,どうしてもC++を思い浮かべますが,Objective-CとC++はまるで別物です.
例えば,あるオブジェクト(クラス)にPrintTextというメソッドがあったとして,そのメソッドを呼び出す処理は,C++とObjective-Cで表記すると,それぞれ図1のようになります.
図1 C++とObjective-Cのメソッドを呼び出す処理

C++とJavaはそれぞれメソッドの定義も呼び出しも似ているのでなじみがあると思いますが,Objective-Cの記述は初めて見る人にとっては,まるで呪文です.メソッドの呼び出しは,[ ]で囲った記述を行い,メッセージ式という形にします.引数には二つ目以降に(一つ目には付けない)ラベルを付ける必要があり,上記例はtoX, toYという引数の意味を表すラベルが付けられています.第1引数はメソッドの名称であるprintTextがラベル代わりになるので,最終的にできあがるのは,
[obj printText:msg toX:x toY:y];
となり,[objというメッセージ通信は,msgをtoXとtoYにprintTextする]という意味になります.言語仕様としては,C++とは全く異なる,ある意味独特の美学が貫かれています.
Objective-Cの言語仕様は,知れば知るほど,C++やJavaに凝り固まった人にとっては奇妙奇天烈であり,逆にMac OSやジョブズのファン,そして多くの初めて学ぶ先入観のない人にとっては,理解しやすい言語です.
それに対して,Androidは普通のJavaです.よくも悪くもごくごく普通のJavaなので,特に言語習得で悩むこともない代わりに,Objective-Cのような美学や知的な興奮は少ないかもしれません.
AndroidとiPhoneでプログラム作成を行う際に,どちらの言語が性に合うか,または興味を持てるかどうか,というのもプログラマにとっては重要なポイントではないかと思います.