Dartのコーディングスタイルガイド「Effective Dart: Style」を読んでいく
DO name types using UpperCamelCase.
型にはUpperCameraCaseを使う。
class SliderMenu {}
DO name extensions using UpperCamelCase
エクステンションにはUpperCamelCaseを使う。
extension MyFancyList<T> on List<T> {}
エクステンションって何だろう?
既存のクラスに後付けで関数などを追加するためのものと理解。
DO name libraries, packages, directories, and source files using lowercase_with_underscores.
ライブラリ、パッケージ、ディレクトリ、ソースファイルにはlowercase_with_underscoresを使う。
import 'file_system.dart';
ライブラリって何だろう?
今のところよくわからないけれど下記のページが参考になりそう。
DO name import prefixes using lowercase_with_underscores.
インポートプレフィックスにはlowercase_with_underscoresを使う。
import 'package:angular_components/angular_components.dart' as angular_components;
インポートプレフィックスがよくわからないけど上の例だとangular_components.xxx
とかで関数やクラスにアクセスできるようになるのかな?
DO name other identifiers using lowerCamelCase.
他の識別子(変数名や関数名)にはlowerCamelCaseを使う。
var count = 3;
void align(bool clearItems) {}
PREFER using lowerCamelCase for constant names.
定数にはlowerCamelCaseを使う方が良い。
const pi = 3.14;
定数にはSCREAMING_CAPSなのかと思っていたので意外。
日本語訳してくれている人がいる!感謝!
DO capitalize acronyms and abbreviations longer than two letters like words.
3文字以上の頭字語と略語は1文字目を大文字にする(普通の単語のように扱う)
class HttpConnection {}
class DBIOPort {}
HTTPは4文字なのでHttp
にするがDBやIOは2文字なのでそれぞれDB
やIO
のままにする。
頭字語と略語の違いがわからない...
PREFER using _, __, etc. for unused callback parameters.
未使用のコールバック引数には_
や__
を使用した方が良い。
futureOfVoid.then((_) {
print('Operation complete.');
});
DON’T use a leading underscore for identifiers that aren’t private.
プライベートではない識別子はアンダースコアから始めない。
class A {
final public = "public";
final _private = "private";
}
DartではJavaのようにpublic
やprivate
などのキーワードが無いようだ。
void main() {
final a = new A();
print(a.public);
print(a._private);
}
これが普通に動くのでプライベートなフィールドにアクセスできない訳でも無い。
上記のページによると他のファイルからインポートした場合はコンパイルエラーが表示されるらしい。
DON’T use prefix letters.
変数名などに接頭辞を使わない。
final defaultTime = "good";
final kDefaultTime = "bad";
今気づいたけどEffective Dart: Styleは下記の3つのチャプターから構成されている。
- Identifiers: 識別子
- Ordering: 順序
- Formatting: 整形
以上までIdentifiersチャプター、以下からOrderingチャプター。
DO place “dart:” imports before other imports.
dart:
から始まるインポートは他のインポートよりも前に置く。
import 'dart:async';
import 'dart:html';
import 'package:bar/bar.dart';
import 'package:foo/foo.dart';
これはVSCodeがよろしくやってくれているので大丈夫そう。いつもありがとう、VSCode。
DO place “package:” imports before relative imports.
package:
から始まるインポートは相対的なインポートよりも前に置く。
import 'package:bar/bar.dart';
import 'package:foo/foo.dart';
import 'util.dart';
DO specify exports in a separate section after all imports.
エクスポートはインポートとは別のセクションで指定する。
import 'src/error.dart';
import 'src/foo_bar.dart';
export 'src/error.dart';
エクスポートはまだ使ったことがないが、インポートしたものを再エクスポートする機能だろうか?
DO sort sections alphabetically.
インポートやエクスポートは辞書順に並べ替える。
import 'package:bar/bar.dart';
import 'package:foo/foo.dart';
import 'foo.dart';
import 'foo/foo.dart';
以上までOrderingチャプター、以下からFormattingチャプター。
DO format your code using dart format.
dart format
コマンドを使ってコードを整形する。
dart format main.dart
VSCodeならFormat Documentを実行するか、macOSの場合はOption + Shift + Fを押す。
CONSIDER changing your code to make it more formatter-friendly
どうすればフォーマッターが整形しやすいかを意識してコーディングする。
一例として長い識別子、ネストが深い式、異なる種類のオペレーターの混合などを避けることが紹介されている。
オペレーターって何だろう?
AVOID lines longer than 80 characters.
1行が81文字以上になることを避ける。
これは普段から気をつけているけれど、どうしても超えてしまう時ってあるよね。
とても長いクラス名(VeryLongCamelCaseClassNames )が元凶であることが多いと紹介されている。
あまり冗長にならないコンパクトな名前を付けられるようになるといいな。
ちなみにURLや複数行の文字列などは例外とされている。
DO use curly braces for all flow control statements.
if
やfor
の{}
を省略しない。
if (isWeekDay) {
print('Bike to work!');
} else {
print('Go dancing or read a book!');
}
例外としてif
にelse
がなく、かつ、すべてが1行に収まる場合は{}
は省略しても良い。
if (arg == null) return defaultValue;
DartPadなんて便利なものあったのか、知らなかった。あるだろうとは思っていたけど...
まとめてみる。
- 識別子
- 型にはUpperCameraCaseを使う。
- エクステンションにはUpperCamelCaseを使う。
- ライブラリ、パッケージ、ディレクトリ、ソースファイルにはlowercase_with_underscoresを使う。
- インポートプレフィックスにはlowercase_with_underscoresを使う。
- 他の識別子(変数名や関数名)にはlowerCamelCaseを使う。
- 定数にはlowerCamelCaseを使う方が良い。
- 3文字以上の頭字語と略語は1文字目を大文字にする(普通の単語のように扱う)
- 未使用のコールバック引数には
_
や__
を使用した方が良い。 - プライベートではない識別子はアンダースコアから始めない。
- 変数名などに接頭辞を使わない。
- 順序
-
dart:
から始まるインポートは他のインポートよりも前に置く。 -
package:
から始まるインポートは相対的なインポートよりも前に置く。 - エクスポートはインポートとは別のセクションで指定する。
- インポートやエクスポートは辞書順に並べ替える。
-
- 整形
- dart formatコマンドを使ってコードを整形する。
- どうすればフォーマッターが整形しやすいかを意識してコーディングする。
- 1行が81文字以上になることを避ける。
- ifやforの{}を省略しない。