🎯

【Dart】 コンストラクタの定義位置について

2024/12/23に公開

はじめに

メンバ変数宣言の前後どちらでコンストラクタ宣言をするべきなのか疑問を持ったので調査しました。

結論

flutter チームのスタイルガイドによればコンストラクタはクラスの先頭に来る

Good

class Point {
  Point(this.x, this.y) : assert(x >= 0 && y >= 0);
  final int x;
  final int y;
}

BAD

class Point {
  final int x;
  final int y;
  Point(this.x, this.y) : assert(x >= 0 && y >= 0);
}

https://github.com/flutter/flutter/blob/master/docs/contributing/Style-guide-for-Flutter-repo.md#constructors-come-first-in-a-class

コンストラクタはクラスの先頭に来る
デフォルト (名前なし) コンストラクターが最初に来て、次に名前付きコンストラクターが来ます。これらは、他のもの (定数や静的メソッドなど) よりも前に来る必要があります。これにより、読者はクラスにデフォルトの暗黙のコンストラクターがあるかどうかを一目で判断できます。コンストラクターがクラス内のどこにでも存在できる場合、読者はクラスのすべての行を調べて、暗黙のコンストラクターがあるかどうかを判断する必要があります

このガイドラインが議論されたIssue
https://github.com/dart-lang/sdk/issues/57282#issuecomment-2484172400

自分はコンストラクタを探さなくても一目でわかるこのガイドラインに乗っかろうと思いました。

Discussion