Objective-C
OSX
iOS

これからObjective-Cを書くプログラマへ

More than 3 years have passed since last update.

Objective-Cを愛してください

  • Objective-CはCの拡張です。
    • Cでできることはすべてできるし、Cでできないこと( 恐らく計算機では不可能なこと )はすべてできません。
  • Objective-CはJavaよりも年上です。
    • 「Objective-CってJavaに似てるね」と言われると、Objective-Cを愛するものとしては少し悲しい気分になります。
    • 歴史的にはJavaがObjective-Cの影響を受けています。
  • メッセージングに使うブラケット[]はObjective-Cのチャームポイントです。
    • Objective-CがSmalltalkの子であると証明するための、とってもチャーミングな形質です。間違っても「キモい」なんて言わないであげてください。
    • 関数とメソッドを見た目で区別できるという利点もあります。
  • メソッド名が長いのはメソッド自身がドキュメントの役割を果たしているからです。
    • タイプ数が多い? Xcodeを始めとしたコード補完が効くIDEを使いましょう。もちろんvimでも可能です。

Objective-Cに愛されるには

  • Cを書けるようになりましょう。
    • Cを知らなければ 本当の Objective-Cを書くことはできません。
    • 逆にCを本当に理解していれば、Objective-CとCに本質的な差がないことを発見できるでしょう。
  • 他言語の常識は一旦捨てましょう。
    • それらの常識はObjective-Cに通用しないかもしれません。
    • 初めてプログラミングを学ぶ子供のように純真な心でObjective-Cに触れましょう。
  • コンパイラを信頼しましょう。
    • clang/LLVMにしろ、GCCにしろ、コンパイラは多くのプログラマよりはるかに賢く最適化します。
    • Objective-Cのオブジェクトを用いた実装のランタイム性能は確かに純粋なCに比べれば低速ですが、ほとんどの場合致命的な問題にはなりません。また、 Objective-Cは純粋なCのコード、C++のコードと共存することが可能です。
  • 動的なプログラミングをしましょう。
    • プロトコルデリゲートカテゴリ など、Objective-Cや動的オブジェクト指向プログラミング言語に備わった機能を活用したコードはとてもエレガントで、なおかつ可読性と拡張性に優れています。
    • Objective-CはC由来の静的型付けとSmalltalk由来の動的型付けを組み合わせることで、( C以上C++未満の )安全性と書きやすさを両立させています。
    • Objective-Cのオブジェクトは、実行時にはすべてidとして評価されることを覚えておくと、コードを書いたりデバッグをする際のヒントになるでしょう。
    • Objective-Cプログラマを名乗る前に、一度はObjective-C Runtime Programming Guideを熟読しておきましょう。

特にOSX、iOSプログラマへ

  • OSX、iOS向けにObjective-Cを書くプログラマは、ARCを使いましょう。

    • ARCはガーベジコレクタでは ありません 。実行時のオーバーヘッドはほとんどありません。
    • 古い環境(OSX 10.5以前やiOS 4.2以前)では動作しませんが、あなたのアプリケーションは本当にそれらをサポートする必要がありますか? もしサポートする必要がないのであれば、MRC(Manual Reference Counting)を使う理由はほぼゼロに近いはずです。
    • ARCはプログラミング初心者向けの機能では ありません 。むしろCの本質的なメモリモデルと、Objective-C伝統の参照カウント双方を理解していなければ使いこなすことはできません。
  • Appleの環境では、あらゆるプログラマが書くコードは5年以内( Objective-Cに限ればほぼ2、3年以内 )に陳腐化します。

    • これはObjective-Cに限りません。Apple帝国ではCやC++のAPIもどんどん削除され、追加され、ときにはフレームワークごと削除されます。あきらめるしかありません。
    • 陳腐化したコードを更新するためにプログラマの仕事が増えます。もしかしたらAppleは雇用創出をしているのかもしれません。
    • Objective-Cが陳腐化しました(オチ)