Null合体演算子
??と??=を使って代替値を指定します。
「Null合体演算子」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。
??演算子
null合体演算子??は、左オペランドがnullでなければ左オペランドを返し、nullなら右オペランドを返します。簡潔なフォールバック処理に使えます。
using System;
class Program {
static void Main() {
int? maybe = null;
int value = maybe ?? -1;
Console.WriteLine(value);
}
}??は最初のnullでない値を選ぶ
左辺に値がある場合はその値が採用され、右辺は無視されます。
using System;
class Program {
static void Main() {
int? a = 7;
Console.WriteLine(a ?? 0);
}
}参照型での??
??はstringのような参照型でも使用でき、nullの場合にデフォルトの文字列を指定できます。
using System;
class Program {
static void Main() {
string name = null;
Console.WriteLine(name ?? "Guest");
}
}??の連結
複数のフォールバックを連結できます。最初のnullでない値が使用されます。
using System;
class Program {
static void Main() {
string a = null, c = "third";
string b = null;
Console.WriteLine(a ?? b ?? c ?? "last");
}
}?? は元の型を返す
左辺が int? で右辺が int の場合、null になることはないため、結果は通常の int になります。
using System;
class Program {
static void Main() {
int? maybe = null;
int sure = maybe ?? 0;
Console.WriteLine(sure + 5);
}
}??= 演算子
null 合体代入 ??= は、左辺が現在 null の場合にのみ右辺を代入します。
using System;
class Program {
static void Main() {
int? count = null;
count ??= 10;
Console.WriteLine(count);
}
}??= は既存の値を保持する
変数にすでに値がある場合、??= は何もしません。
using System;
class Program {
static void Main() {
string config = "custom";
config ??= "default";
Console.WriteLine(config);
}
}??= による遅延初期化
??= は、最初に値を設定し、その後はその値を保持する場合に最適です。
using System;
class Program {
static string cache = null;
static string GetData() {
cache ??= "loaded";
return cache;
}
static void Main() {
Console.WriteLine(GetData());
Console.WriteLine(GetData());
}
}?? と GetValueOrDefault
どちらも代替値を提供しますが、?? のほうが柔軟です。参照型でも使うことができ、代替値に任意の式を指定できます。
using System;
class Program {
static void Main() {
int? n = null;
Console.WriteLine(n ?? 5);
Console.WriteLine(n.GetValueOrDefault(5));
}
}メソッド引数での ??
値が必要な場所でデフォルト値を指定するには、?? をインラインで使用します。
using System;
class Program {
static void Greet(string name) {
Console.WriteLine("Hello, " + name);
}
static void Main() {
string input = null;
Greet(input ?? "friend");
}
}短絡評価の動作
?? の右辺は、左辺が null の場合にのみ評価されます。これは短絡評価と似た動作です。
using System;
class Program {
static int Compute() {
Console.WriteLine("Computed");
return 42;
}
static void Main() {
int? known = 1;
int result = known ?? Compute();
Console.WriteLine(result);
}
}理解度チェック
null 合体演算子の理解度を確認しましょう。
まとめ
?? 演算子は、左辺が null でなければ左辺の値を、それ以外の場合は右辺の値を返します。また、連結して使用できます。null ではない代替値を指定すると、結果の型から null 許容性がなくなります。
??= は対象が null の場合にのみ代入するため、デフォルト値の設定や遅延初期化に適しています。どちらも必要な場合にのみ右辺を評価します。
よくある質問
「Null合体演算子」レッスンは無料ですか?
はい。「Null合体演算子」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。
「Null合体演算子」で何を学びますか?
??と??=を使って代替値を指定します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Null合体演算子」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。