【Unity×C#】if文省略形シリーズ 第二弾:null合体、合体割り当て、条件演算子編

Unity

「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";

非常にシンプルです。
inputNamenull なら "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();

playernull でなければ Play() が呼ばれ、null ならスルーされます。
安全かつ短く書けるので、null対策として非常に実用的です。
これは必修です。必修。

まとめ

処理内容普通の書き方省略形
nullなら代替値if (...) { ... } else { ... }??
nullなら代入if (x == null) x = ...;??=
nullならスキップif (x != null) x.Method();x?.Method();

次回予告:条件式に潜む悪魔、||=と&&=?

次回は、さらに省略できる条件演算子たちに踏み込むかもしれません。
||=&&= といった、ややニッチだけど知っておくと便利な書き方も紹介する予定です。

それでは、スッキリしたnull処理で、安全なコードライフを。


このエントリーは旧ブログで公開していた同テーマのエントリーを加筆修正したものです。

タイトルとURLをコピーしました