Posted at

「Advanced Swift」のSwiftコーディング規約

More than 3 years have passed since last update.


以下は書籍「Advanced Swift」のSwiftコーディング規約の部分を翻訳したものです。原文はオンラインプレビューで公開されています。

Advanced Swift - Swift Style Guide


この本を書くとき、そして私たちのプロジェクトでSwiftのコードを書くとき、以下のルールに従うようにしています。


  • 可読性が最も重要です。これには簡潔性が助けになります。

  • 関数には常にドキュメントとしてのコメントをつけましょう。ジェネリクスを使うものは特に。

  • 型は大文字で始め(UpperCaseLetters)、関数と変数は小文字で始めます(lowerCaseLetters)。

  • 型推論を使いましょう。型が明らかなのに明示的に書くことは可読性を損ないます。

  • 曖昧さがある場合や規約を定義する場合は型推論を使わないようにしましょう。(例えばfuncが明示的な戻り値の型を持つのはこれが理由です)

  • クラスにしかない機能や参照型の性質が必要でない限り構造体を使いましょう。

  • クラスは継承される前提の設計でない限りfinalとしましょう。

  • 後置クロージャ(trailing closure)を使いましょう。直後に別の開き括弧が来る場合は例外です。


  • guardを使って関数から早期に離脱しましょう。

  • 強制アンラップや暗黙的アンラップオプショナル(implicitly unwrapped optional)の利用は避けましょう。これらはときに便利ですが、これらが頻繁に必要になる場合はたいてい他の何かが間違っていることのサインです。

  • 同じコードを複数書かないようにしましょう。似たようなコードを何回か書いていることに気づいたらそれを一つの関数にまとめましょう。その関数はプロトコル拡張として実装することを検討してください。


  • mapreduceを積極的に使いましょう。ただし強制はせず、forループが適切な場合はそちらを使いましょう。高階関数を使う目的はコードの可読性を高めることです。forループの方がわかりやすい場面でむりやりreduceを使うことはこの目的に反します。

  • 定数を積極的に使いましょう。値を変更することがわかっている場合を除いてletを使いましょう。ただしコードがより分かりやすく効率よくなる場合は変数にしてください。その場合、値の変更を関数内に閉じることで予想外の副作用を防ぎましょう。

  • Swiftのジェネリクスを使うと関数のシグネチャが長くなりがちです。残念ながら長い関数定義を複数行に分ける良い方法が今のところ定まっていません。サンプルコードではできる限り一貫性を持たせるようにします。

  • この本の著者の半数にとってとても残念なことですが、「cuddled else」がSwiftの公式スタイルです: } else {