🌟
non-nullableなクラスメンバをコンストラクタで初期化する方法
class ConstructorTest{
int testId;
}
のtestIdを初期化する場合を例にする。
1.引数で渡す
ConstructorTest.constructor1(this.testId);
ConstructorTest constructor1 = ConstructorTest.constructor1(1);
引数1つは必須なのでnon-nullableでOK
2.required付き名前付き引数で渡す
ConstructorTest.constructor2({required this.testId});
ConstructorTest constructor2 = ConstructorTest.constructor2(testId:2);
required指定でtestIdは必須なのでOK
3.デフォルト値付き名前付き引数で渡す
ConstructorTest.constructor3({this.testId = -5});
ConstructorTest constructor3 = ConstructorTest.constructor3();
デフォルト値(-5)を設定しているのでOK
4.nullable名前付き引数で渡す
ConstructorTest.constructor4({int? testIdVal}) : testId = testIdVal ?? -1;
ConstructorTest constructor4 = ConstructorTest.constructor4();
イニシャライザリストでnullチェックをしてtestIdを設定しているのでOK。ちなみにコンストラクタ関数内で初期化するのは駄目。
ConstructorTest.constructor5(int? testIdVal){
testId = testIdVal ?? -1; //これは駄目
}
↑で初期化したい場合はlate指定(late int testId;)で宣言すればOK
上記をまとめてみると
class ConstructorTest{
ConstructorTest.constructor1(this.testId);
ConstructorTest.constructor2({required this.testId});
ConstructorTest.constructor3({this.testId = -5});
ConstructorTest.constructor4({int? testIdVal}) : testId = testIdVal ?? -1; //constructor3のnull-aware operatorバージョン
int testId;
int testId2 = -1; //Constructorで初期化していないのでデフォルト値を入れる必要がある
}
void main() {
ConstructorTest constructor1 = ConstructorTest.constructor1(1);
ConstructorTest constructor2 = ConstructorTest.constructor2(testId:2);
ConstructorTest constructor3 = ConstructorTest.constructor3();
ConstructorTest constructor4 = ConstructorTest.constructor4();
print('constructor1.testId = ${constructor1.testId}');
print('constructor2.testId = ${constructor2.testId}');
print('constructor3.testId = ${constructor3.testId}');
print('constructor4.testId = ${constructor4.testId}');
}
//constructor1.testId = 1
//constructor2.testId = 2
//constructor3.testId = -5
//constructor4.testId = -1
Discussion