Swiftのコーディング規約についていろいろ資料を見る時間があったので、規約で忘れがち、重要度が高そうなものを抜粋してまとめてみました。
(※ 個人差ありです)
基本的なもの、具体例は「参考」にあるものが詳しいです。(エウレカのものが分かりやすいと思います。)
目的
- プログラマー自身のエラーを減らして、さらにエラーを見つけやすくする
- コードの可読性と明快さを向上させる(他の人がコードをレビューもしくは書き換えると仮定して) => 冗長さがなく、誤解の可能性を少なくする
規約
- フォーマット
- 半角スペース4つ分(Text Editingで設定する)。
- 命名
- 出来る限り省略された名前を付けない。
- 副作用がない場合は、名詞を使用する。
- 副作用がある場合は、動詞を使用する
- 依存関係
- 必要最低限のものだけを
import
する。(UIKit
をインポートする必要がある場合は、Foundation
をインポートしない。)-
import
文はOS固有のフレームワークと外部フレームワークとの間に空行を1行入れて、アルファベット順に並べる。
-
- 必要最低限のものだけを
- 宣言の順序
-
class
、struct
、enum
、extension
、protocol
などの全ての宣言は// MARK: - <宣言の名前>
を付ける。
-
- アクセス修飾子
- privateとして宣言することをデフォルトとして、必要なときだけinternalまたはpublicとして外部に公開する。
-
型
- できる限り常に
var
ではなくlet
を使う。
- できる限り常に
-
シンタックスシュガーを使用し短く書く。
- 必要な場合を除いて、変数やプロパティの型は宣言文の左側か右側のいずれか片側から推測できるようにする。
- Forced Unwrappingは避ける
-
コメント
- コメントは「なぜ?」という問いに答えるものであり、それ以外のことはコード自体が説明すべきである。
-
Collections / SequenceTypes
-
isEmpty
,first
,last
を使用する(indexを使用しなくても良い場合は使用しない) -
count
を使用する箇所はindices
を検討する- → Off-by-oneエラーを回避できる
-
-
Self
- selfは省略する
- クロージャ内では
[weak self]
、guard let
節を用いて循環参照のケアをする。 また、予期せぬクラッシュをケアする為に[unowned self]
は使用しない。
参考
数字は最終更新日
- raywenderlich 2019/04/28
- Swift API Design Guidelines
- エウレカ 2016/08/03
- クックパッド 2017/04/25
- リクルートライフスタイル 2017/07/11