この章のテーマ §
null 合体演算子(??演算子)について学びます。null値は扱えない機能も多いやっかいな値ですが、容易に代理の値を指定できます。
前提知識 §
Console.WriteLineメソッド, 文字列の基礎, string?型
解説 §
null 合体演算子(??演算子)は、ある値がnullの時、別の値を指定する機能を持ちます。
たとえば、x ?? yは、xがnullではないとき、xの値のままです。しかし、xがnullのときはyの値になります。
サンプルソースの場合、Console.WriteLineメソッドにnullを渡すと何も出力しませんがそれでは分かりにくいので、"(NULL)"を出力させています。
罠の数々 §
- null値はC#のプログラムで不可避に入り込んでくる値であるが、多くの場合処理できない。null 合体演算子の出番は割と多い
- 最近のC# はnull非許容がデフォルトであるが、これはnull値が絶対発生しないことを保証するわけではない。たとえば、型名の末尾に?を付けてnull許容を宣言してしまえば(サンプルソースのstiring?参照)、null値を入れられるからである。やはり、null 合体演算子は必要になる
- x ??= yという書き方も可能である。xがnullの場合のみ、yの値に置き換えられる
参考リンク §
?? および ?? 演算子 (C# リファレンス)
サンプルソース: nullCoalescingOperator §
sub("Hello");
sub(null);
void sub(string? s)
{
Console.WriteLine(s ?? "(NULL)");
}
実行結果 §
Hello
(NULL)
リポジトリ §
https://github.com/autumn009/CSharpPrimer2
練習問題 §
以下のプログラムの実行結果を予測してみよう。
var x = 1;
var y = "SAMPLE";
y ??= (x++).ToString();
Console.WriteLine($"x={x} y={y}");
- x=1 y=1
- x=2 y=2
- x=1 y=SAMPLE
- x=2 y=SAMPLE
- x=1 y=(x++).ToString()
[[解答]]