Dartでnullを扱う際の便利なオペレータ達
Dartにはnullが有る
nullは使うべきじゃないし、そもそも言語としてnullすら無い!という風潮ですが、新しい言語であるDartにはnullが普通に有ります。 さらにnullが有るのにOptional系の便利なツールは標準では提供されていません。
その代わり、nullが有ってもある程度は安全に、楽にコードを書けるオペレータが用意されています。
expr1 ?? expr2
: expr1がnullじゃなければexprt1を返し、もしexpt1がnullならexpr2を返す
expr1 ??= expr2
: exprt1がnullなら、expr2をexpr1に代入する
main () {
int v = null;
assert (v == null);
// vがnullなら0を返したい場合
// コレは普通の三項演算子
assert(0 == (v == null ? 0 : v));
// 上記と等価な別の記法
assert(0 == (v ?? 0));
// 上記はともに「値を返す」だけなので、vはまだ相変わらずnullのまま
assert(v == null);
// nullなら別の値を入れて上書きする「??=」演算子がある
v ??= 0;
assert(v == 0);
// vはもうnullじゃないので、以下の代入は働かない。
v ??= 100;
assert(v == 0);
}
obj?.hoge()
: objがnullなら、メソッドを実行しない
main () {
// メソッド呼び出しを`?.`とすることで、nullならそのメソッドが実行されなくなる。
a = null;
assert(null == a?.map((v) => v * 2)?.reduce((v1, v2) => v1 + v2));
// nullじゃなければ普通に実行される。
a = [1, 2, 3];
assert(12 == a?.map((v) => v * 2)?.reduce((v1, v2) => v1 + v2));
}
そもそもOptional頂戴!という気持ちでは有りますが、無いものは無いので仕方ありません。 また個人的にもApache Groovyでずーっとコードを書いてきたので正直このDartのオペレータ自体には違和感はありませんでした。
公開日:2019/04/01