📱
Dartの Null-aware operatorsについてのまとめ
はじめに
Dart 2.12 で sound null safety
と呼ばれるnull安全機構が導入されました。
Dart 2.12 では sound null safety
機能を有効にした場合、以下のようなコードを実行しようとするとエラーになります。
void main() {
int a = null;
}
main.dart:2:11: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
int a = null;
^
この機能により、開発者は定義した変数に意図せずnullが代入されることを防ぐことが出来ます。
入出力など、nullが代入される可能性がある変数には、以下のように型名の末尾に ?
を追加することでnullが代入される可能性があることを明示することが出来ます。
int? a = null;
ちなみに、Dartでは初期化されていない全ての変数のデフォルト値はnullとして扱われるため、
int a;
はコンパイルエラーになり、
int? a;
ではaにnullが代入されます。
Null-aware operators
Dartにはnullに関する専用のオペレーターが何種類かあります。順に見ていきましょう。
??= 演算子
??=
演算子は左項がnullの場合にのみ左項に右項を代入します。
int? a; // = null
a ??= 3;
print(a); // <-- Prints 3.
a ??= 5;
print(a); // <-- Still prints 3.
??=
演算子を使わない場合、以下のコードで同等のことが表現できます。
int? a; // = null
if (a == null) {
a = 3;
}
print(a); // <-- Prints 3.
if (a == null) {
a = 5;
}
print(a); // <-- Still prints 3.
?? 演算子
??
演算子は左項がnullの場合に右項、左項がnullでない場合に左項の式を返します。
JavaScriptやTypeScriptの Nullish Coalescing
と同じように使えるようです。(Dartにはundefinedが無いので、トランスパイラで何かしら不具合が出る可能性はあります)
参考文献
Discussion