「Unityで書く C# if文省略形シリーズ」、全3回の第二弾です。
今回のテーマは null とその周辺にある便利な省略形。
C#ではnullのチェックや代入処理が多くなりがちですが、それをスッキリ書ける演算子がいくつか用意されています。
null合体演算子で書く
まずは「nullならこっちを使って」という処理に使える ??
演算子です。
🗂️ 普通バージョン
string name;
if (inputName != null)
{
name = inputName;
}
else
{
name = "Unknown";
}
よくある「nullならデフォルト値」のパターンです。
悪くないですが、ちょっと長いですね。
✂️ null合体演算子バージョン
string name = inputName ?? "Unknown";
非常にシンプルです。inputName
が null
なら "Unknown"
を使う、という意味です。
読みやすく、意図も明確になります。
null合体割り当て演算子で書く
続いては「もし値がnullなら代入してね」という場面で便利な ??=
です。
🗂️ 普通バージョン
if (list == null)
{
list = new List<string>();
}
nullチェックしてからの初期化。これもよく見ますね。
✂️ null合体割り当て演算子バージョン
list ??= new List<string>();
たった1行で同じ処理が可能になります。
nullの場合だけ代入されるため、既に値があればそのまま使われます。
初期化の簡略化に便利です。
null条件演算子で書く
最後は「nullだったら何もしないでね」というときに使える ?.
です。
🗂️ 普通バージョン
if (player != null)
{
player.Play();
}
ありがちなnullチェック。コードの中で繰り返されがちです。
✂️ null条件演算子バージョン
player?.Play();
player
が null
でなければ Play()
が呼ばれ、null
ならスルーされます。
安全かつ短く書けるので、null対策として非常に実用的です。
これは必修です。必修。
まとめ
処理内容 | 普通の書き方 | 省略形 |
---|---|---|
nullなら代替値 | if (...) { ... } else { ... } | ?? |
nullなら代入 | if (x == null) x = ...; | ??= |
nullならスキップ | if (x != null) x.Method(); | x?.Method(); |
次回予告:条件式に潜む悪魔、||=と&&=?
次回は、さらに省略できる条件演算子たちに踏み込むかもしれません。||=
や &&=
といった、ややニッチだけど知っておくと便利な書き方も紹介する予定です。
それでは、スッキリしたnull処理で、安全なコードライフを。
このエントリーは旧ブログで公開していた同テーマのエントリーを加筆修正したものです。