0Pricing
C# Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Nullable値型の基本
  2. HasValueとValueプロパティ
  3. Null合体演算子
  4. 計算におけるNullable
← C# Academyに戻る