fresh digitable

めんどくさかったなってことを振り返ったり振り返らなかったりするための記録

effective dartを一言ぐらいでまとめていく(Style編)

JavaではEffective Javaを、KotlinではKotlin in actionを読んだので、同じようなことをDartでもやっておこうと思って探したら公式のページに書いてあった。

dart.dev

書き始めて3か月ぐらい経つのでちょっと遅いかもしれないが読んでいくことにする。全訳するのはだるいので、項目ごとに短めにまとめていく。タイトルをほぼ直訳するだけになるかもしれない。また、自分の解釈を多分に含むので、Dartを勉強しようとして間違えてこのページに来てしまった人は公式のページも合わせて読んでほしい。

本題

一貫性があり、ロバストで速いDartのコードを書くための2つの包括的なテーマを紹介する:

  • 一貫性があること:二つのコードを見比べたとき、両者の異なる部分にこそ有用なことが存在する。そうであるべき。
  • 簡潔であること:Dartは他のいろんな言語を改善するような形で簡潔に記述できるように作られた。ただし、コードゴルフみたいに詰め込んだコードを書くよりも、経済的なコードを書くべき。

DartアナライザーにはLinterの機能があって、一貫性のあるいいコードを書く助けになる。

ガイドラインは4つの部分に分けられる。 - スタイル - ドキュメンテーション - 使い方 - デザイン

スタイル

識別子

  • class, enum, typedef, 型パラメータはパスカルケースにする。引数なしのアノテーションクラスは小文字で始めてもよい。
  • extensionsの名前はパスカルケースにする。
  • ライブラリ、ファイル名、ディレクトリ名、パッケージ名はスネークケースにする。
  • importプレフィクスはスネークケースにする。
  • メンバ、トップレベル定義、変数、引数、名前付き引数はキャメルケースにする。
  • これから書くコードでは、定数やEnumのメンバはキャメルケースにする。
    • 昔はSCREAMING_CAPSを使ってたけどやめた。その時のものが多少残っている。
  • 2文字より多い頭字語や略語は大文字にする。ただし、IO(Input/Output)、Id(Identification)は例外とする。
  • 使わないコールバック変数は_, __にするのが好ましい。ただし、匿名とかローカルのものだけで、トップレベル関数は逆に省略してはならない。
  • privateでない識別子にリーディングアンダースコアを使わない。
  • プレフィックス文字を使わない。

順序

  • インポートの順序
    • dart:
    • package:
    • 相対インポート
    • export
  • それぞれのセクションごとに空白で区切る
  • セクションごとにアルファベットでソートする

フォーマット

  • dart formatを使え
  • フォーマットしても読みにくいコード(識別子が長すぎたり、ネストがめっちゃ深かったり、いろんなオペレータを複雑に組み合わせてたり)になったら意味がないので、変数名を短くしたり、別の変数に移し替えたりできないか考えてみてほしい。
  • 1行が80文字より長くならないようにする。ただし、URLやファイルパス、コメント、長い文字列(Stringの変数に格納するものなど)はこの限りではない。
  • すべての制御文で波カッコ(中カッコ)を使う。ただし、一行で書けるif文についてはこの限りではない。