何ですか?Dartの二重疑問符?


96

次のコード行には、2つの疑問符があります。

final myStringList = prefs.getStringList('my_string_list_key') ?? [];

どういう意味ですか?

回答:


192

??二重の疑問符演算子手段「場合はnull」。たとえば、次の式を考えてみましょう。

String a = b ?? 'hello';

これはa等しいことを意味しますがb、がbnullの場合はにa等しくなり'hello'ます。

別の関連する演算子は??=です。例えば:

b ??= 'hello';

つまり、bがnullの場合は、に等しく設定しhelloます。それ以外の場合は、変更しないでください。

参照

条項

ダート1.12リリースのニュースをまとめて以下に呼ばヌルを意識した事業者

  • ?? --null演算子の場合
  • ??= --null対応の割り当て
  • x?.p --null対応アクセス
  • x?.m() --null対応のメソッド呼び出し

3
なぜそれが面白いのですか??:ではなく、PHPから来た人にとってはかなり誤解を招きます。PHPでは完全に反対を意味します。
Vedmant

1
@Vedmantは、おそらく?三項演算子によってすでに使用されているためですString a = b == true ? 'x' : 'y';。if-null演算子は、のような3項nullチェックの単なる省略形であることがわかりますString a = a == null ? 'hello : a;
ブルーノフィンガー

1
@BrunoFingerは?三項演算子のためのPHPで同じように使用され、代わりにショートカットが好きであるされて$a = $b === true ? $b : 'y'、あなたが入力できる$a = $b === true ?: 'y'の代わりに、または$a = $b === true ? 'x' : $b-$a = $b === true ?? 'x'
Vedmant

3

Dartは、nullの可能性がある値を処理するための便利な演算子をいくつか提供しています。1つは?? =代入演算子で、変数が現在nullの場合にのみ変数に値を代入します。

int a; // The initial value of a is null.
a ??= 3;
print(a); // <-- Prints 3.

a ??= 5;
print(a); // <-- Still prints 3.

もう1つのnull認識演算子は?? 、式の値がnullでない限り、左側の式を返します。nullの場合、右側の式を評価して返します。

print(1 ?? 3); // <-- Prints 1.
print(null ?? 12); // <-- Prints 12.

賛成票を求めるために2年前にすでに回答された投稿に回答しましたか?
アーサーレイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.