🐕
「class._()」でprivate constructorを定義する
flutter_native_splashのExample
を読み、_() が不可解なため調べました。
不可解な部分
class Init {
Init._();
static final instance = Init._();
Future initialize() async {
await Future.delayed(const Duration(seconds: 3));
}
}
結論
-
Init._()
はprivate constructor 。
解説
Dartにアクセス修飾子(public/protected/private)はありません。そのため、他言語のようにデフォルトコンストラクタにprivate
修飾子を施す処理は実装できないため、_ (通称private & 名前必須だけど、処理に関係ない)を名前付きコンストラクタ
の名前にしている。
private constructorとは?
1度だけインスタンスされる特殊なコンストラクタです。
インスタンスを多量に生成するとパフォーマンス低下の原因につながるため、明示的にインスタンス化できないことを表すこでパフォーマンスや可読性、保守性を担保できる。
(コンストラクタを宣言していない場合、暗黙的にスーパークラスの引数がない状態のコンストラクタが実行される)
参考文献
Dartでインスタンス化を防ぐ方法
Dartの言語仕様 多量のインスタンスがパフォーマンス低下につながる根拠
Discussion