null なんちゃら演算子の使い方がいつも迷うので、自分用に超簡単メモφ(..)
(オブジェクトや変数の型の明示とか省略)
null条件演算子【 ?. 】
var name = person?.name;
person が null の場合は name は null。
person が null でない場合のみ person.name を返す。
これは下記のコードと等価。
var name = "";
if (person == null)
name = null;
else
name = person.name;
null合体演算子【 ?? 】
var name = personName ?? "personName is null";
personName が null の場合でも name に 何か ("personName is null") 代入したい。
personName が null でない場合は、name に personName がそのまま代入される。
これは下記のコードと等価。
var name = "";
if (personName == null)
name = "personName is null";
else
name = personName;
null条件演算子 と null合体演算子 の合わせ技
とあるオブジェクトのメンバ変数を取得したいけど、もしそのオブジェクトが null だった場合に既定値をぶち込む、的な用途に使うといい感じっぽい。
var name = person?.name ?? "person is null";
(person が null の時、person?.name は null なので ?? の右側が評価される)
これは下記のコードと等価
var name = "";
if (person == null)
name = "person is null";
else
name = person.name;
※ 2020/06/12 追記
コメントにてご指摘頂きましたので追記します。
上記コードで person は null ではないが person.name が null の場合も person is null が返りますね。
できるだけシンプルに解釈できるようにサラッと書いてしまったので不正確でした。
等価コードは下記のような感じでしょうか。
var name = "";
if (person != null && person.name != null)
name = person.name;
else
name = "person or person.name is null";
参考にさせていただい記事
いつも有難うございます。