Dart勉強中に「Null Safetyって何だっけ」と思って調べたのでメモ。
Null Safetyとは
一言で言うと、型にnullを受け付けないようにする設定で、全ての型がnull非許容型になる。
Null Safetyでない場合は、変数aにintの型指定をした場合、変数aは null の型も許容される(null許容型)。しかし、Null Safetyであれば、null が入るとエラーになる。
Null Safetyにした方が、型起因のエラーが減るので好まれる場合が多い。
Null Safetyでもnull許容型にしたい場合
? を型につければOK!
void main() {
int? first; // intに「?」つけてる
first = null;
print('first is $first.');
}
// リストはこんな感じ
// List<int?> numbers = [6, 6, null];
null許容型をnull非許容型に変えたい場合
! を使用時につければOK!
int? couldBeNull() => 0;
void main() {
int a = couldBeNull()!.notNull(); // couldBeNull()の後に「!」を付けてる
print('a is $a.');
}
lateを使うと、一旦nullでも後から値を割り当てればOK
lateは「後から値をちゃんと入れるから、ちょっと待っててね!」っていうときに使う。
ただし、値が入ってない状態のときにその変数が読まれたらエラーになる。
class Dog {
late String _name; // lateが無かったらエラーになる。値が入ってないから。
set name(String dogName) {
_name = 'Dog Name: $dogName';
}
String get name => _name;
}
void main() {
final myDog = Dog();
myDog.name = 'Pochi'; // ここでStringの値が格納されている
print(myDog.name); // 変数が読まれる際には値があるのでOK(出力は、Dog Name: Pochi)
}
もっと詳しく知りたい!練習したい!という方は、公式ドキュメントでいくつか練習問題があるので見てみてください。

Null safety codelab
Learn about and practice writing null-safe code in DartPad!