西海岸より

つらつらざつざつと

iPhoneのソースレビュー項目

会社では、iPhoneがらみでソースレビューを多くする機会があったので、一度まとめてみた。(ただし、そのプロジェクトの場合や都合によるので参考にならないかもしれない)

コード整形

  • インデントはスペースを4つとする。(数はプロジェクトごとに都度決める)
  • タブの代わりにスペースを挿入する
  • 1行の長さは80文字を目安とし、最大でも120文字を超えないようにする。
  • 1メソッドはエディタ上に収まる程度の行数とする。
  • 1クラスは、1000行程度を目安とする。

命名規約

  • クラス名
    • 大文字からは始まり、以降単語の始まりを大文字とする小文字との組み合わせ。
    • 名詞とする。
  • メソッド
    • 小文字から始まり、以降単語の始まりを大文字とする小文字との組み合わせ。
    • 動詞から始まる。
  • 変数名
    • 小文字から始まり、以降単語の始まりを大文字とする小文字との組み合わせ。
    • propertyによるアクセサを提供する変数は、変数名の後ろに「_」を付加
      • アクセサメソッドと変数名の混同を避けるため
      • 先頭に「_」をつけるのは、Cの仕様上不可
    • 名詞とする。
  • インスタンス変数名
    • 意味がわかるように、親切な名前とすること。
  • ローカル変数名
    • 一時的に利用するため、略語等短い名称でもよい。
  • メソッドの引数の変数名
    • インスタンス変数と重複しないようにすること。
    • 重複する場合は、先頭に冠詞(a, an)を付加して対応。
  • コレクション関連の変数名
    • NSArray -> XXXXArray, XXXXList等
    • NSDictionary -> XXXXDict
  • カテゴリのファイル名
    • 「カテゴリの元となるクラス名」+「カテゴリ名」.h

義体

  • define定数は、一つのファイルにまとめること
    • 複数ファイルにまたがり、定数定義の衝突が発生した場合にバグの追求が困難
  • enumの定義は、プレフィックスとして、クラス名、機能名を追加。
    • (例) MMTwitterResponseStatusXXXX
  • 静的定数の宣言は、.mファイルの先頭箇所に定義
static const NSInteger someInt = ...
static NSString * const someStr = ...

コーディング規約上

  • includeでは無く必ずimportを用いること
  • クラスのインスタンス変数が存在する場合、必ずdeallocを宣言し、release処理を記述すること。
  • インスタンス変数は基本privateとする。
    • @privateを入れること。
    • 例外は、継承で参照させる場合など。
    • publicは無いと考えてよく、継承時も含めて、@propertyによるアクセサを用いること。
  • 文字列のpropertyにはcopy属性を使うこと。
    • copyをしない場合、参照先の値が変わることもありうる。
  • property属性を記述した場合、nonatomic属性を付加すること。
    • 複数スレッドによりアクセスされる場合のみatomicとする必要あり。
  • NSErrorオブジェクトを用いて、Errorハンドリングを適切に行う。
  • NSExceptionは使わない。
  • クラス変数への直接代入はしてはいけない。(メモリ管理が漏れる可能性が高いため)
    • 必ずプロパティによるアクセサ経由で代入すること。
  • retainは通常は無い。
  • ViewControllerは、Viewのライフサイクルに沿うこと。
    • viewWillAppearやviewWillDisapperなど。
  • 変数のスコープを限定するため、メソッド内で{}を活用したコーディングを行う。
  • ビルド実行時に、警告やstatic analizerによる指摘箇所が0となること。