GithubとRay WenderlichのSwiftのコーディングスタイルガイドを読んでみた

GithubとRay WenderlichのSwiftのコーディングスタイルガイドを読んでみた脳内を更新するために、Swiftのスタイルガイドを読んでみることにした。Googleで 「swift style guide」(参照)と検索して、上位に出てきた英語の有名なスタイルガイドということで2つ選んでみた。

コードのテストは、コマンドラインで行ってみる。バージョンは下記の通り。

$ swift -version
Swift version 1.1 (swift-600.0.56.1)
Target: x86_64-apple-darwin14.1.0

今なら1.2で試したほうが良いかもしれない。でも、style guideの更新日付も1.2を考えていないようだし、style guideはリリースされたバージョンに対してのものかも知れないので、1.1のまま行うことにした。当然のことながら、Style guide毎に考え方が違うが、ここでは自分が良いと思ったり発見と思ったりしたものをメモとして記録してく。項目名は変わる可能性があるので項目へのリンクはつけていない。該当箇所は各スタイルガイドのページで検索して探す必要がある。

Github

まずはGithubから。

  • Contribution guidelinesがあって、しっかりしてるなと思った。
  • Force-Unwrapping of Optionalsを使うのは避ける
    • if-letを使ったほうが良い。そう思うけど。
    • Optional Chainingを使うのも良い。
  • 必要なとき以外、selfを付けない
    • Objective-Cの時は、自分のクラスの変数にアクセスするときもselfを付けるのがデフォだったような気がするけど、swiftだと付けないのが一般的なのかな。
    • 説明のところに、closureでselfを使った際に目立たせると書いてある気がする。確かに、それで気づくかも。
  • ClassよりもStructを利用する
    • class独特の機能(deinitializersとか同一性とか)を必要としないならば、structを使うのが良い。
    • 値型はよりシンプルだから。
    • letで想定している動きをする。
  • Classは基本finalにしておく
    • 必要が生じて継承した場合も、オーバーライドしないメソッドにはfinalをつけておく
    • 継承よりコンポジションのほうが良いから。
    • 確かに言いたいことはわかる。finalを先頭に付けるのは根付くかな。
  • funcの宣言の後にはスペースを
    • func &lt:|&lt: &lt:A>(lhs: A, rhs: A) -> A という感じにするということ。
    • 記号などが重なるとわかりづらくなるのでたしかにスペースを入れたほうが良いかもしれない。
    • ただほとんどの場合記号をメソッド名に入れたりしないので根付くかな。

感想

少なかった。この量だとあまり実践的でない気がする。グローバル定数の宣言はどうするかとかenum型はどうするか(しないか)とか書いて欲しかったなぁ。

Ray Wenderlich

そして、Ray Wenderlich。Objective-Cの時と同様に、Ray Wenderlichのスタイルガイドはチュートリアルを記載するときに読みやすくするのが目的。だけど、参考にはなる。

  • 2 spaces
    • Githubの方はspaceではなくtabを使うと書いていた。
  • メソッドの波括弧は最初のラインで書く。でも閉じるときは改行して閉じる。
  • 同じ目的のプロパティならば、1行でまとめて宣言してしまっても良い。
  • プロトコルに対応するときは、extensionで分けてしまう。
    • 例: extension MyViewcontroller: UITableViewDataSource {...}
    • 良くないとされる例: class MyViewcontroller: UIViewController, UITableViewDataSource, UIScrollViewDelegate {...}
    • その際、// MARKを忘れずつけておく。
    • 確かに、Swiftではextensionの切り分けが自然にできるからやったりする。
  • Swiftのnative type を使いましょう
    • NSNumberやNSStringではなくDoubleやStringを。
    • SpriteKitではCGFloat使っても良いということ。変換が大変だからという理由。
  • if-letでunwrapするときは、同名でやる
    • 例: if let subview = subview {...}
    • おお。いつも微妙に名前変えてた。
  • StructのinitializersはSwiftのものを使いましょう
    • 例: let bounds = CGRect(x: 40, y: 20, width: 120, height: 80)
    • あぁ、CGRect(40, 20, 120, 80)ってやってた。。
    • 他にも、CGRect.inifiniteRectとかCGRect.nullRectとか使う。既存の変数に対しては、.zeroRectとか使える。

感想

確かに少し冗長に感じた。情報量はGithubよりは多かったと思う。

2つの感想

Swiftに関してまだちゃんと取り組んでいないのかも。もっといろいろコーディングスタイル固めてもらえると参考になるんだけどなぁ。

Pocket
LINEで送る

You may also like...