Pemeriksaan null adalah bentuk pattern matching yang paling dasar: nilai null dicocokkan dengan constant pattern bernama null. Bentuk is null dan is not null menyusun pemeriksaan itu dalam gaya deklaratif, dan keduanya menyatu mulus dengan pola lain serta arm switch expression. Bab ini merangkum seluruh bentuk pola yang berhubungan dengan kekosongan.

Pola is null dan is not null #

Pola x is null menguji kekosongan lewat pemeriksaan referensi bawaan bahasa, sehingga overload operator == pada tipe kita tidak memengaruhinya. Bentuk is not null menegasikannya sekaligus mengikat variabel di cabang yang lolos, sehingga satu baris melayani pemeriksaan dan pengambilan nilai. Di dalam switch expression, arm null menampung kekosongan sebelum arm pola lain diuji.

Contoh: Promo, Kupon, dan Nilai Campuran #

csharp
string? CariPromo(string produk)
{
    return produk == "Kopi Gayo" ? "HEMAT20" : null;
}

string? kodePromo = CariPromo("Teh Melati");

string pesan = kodePromo switch
{
    null => "Tanpa promo",
    "HEMAT20" => "Diskon 20 persen",
    _ => $"Promo aktif: {kodePromo}"
};

Console.WriteLine(pesan);

if (kodePromo is null)
{
    Console.WriteLine("Cek promo lain di halaman produk");
}

string? kupon = CariPromo("Kopi Gayo");

if (kupon is not null)
{
    Console.WriteLine($"Kupon kopi: {kupon}");
}

object? isi = "Keranjang belanja";

if (isi is not null and string teks)
{
    Console.WriteLine($"Teks: {teks}");
}

Output yang Dihasilkan:

text
Tanpa promo
Cek promo lain di halaman produk
Kupon kopi: HEMAT20
Teks: Keranjang belanja

Mari kita bedah baris demi baris:

  1. null => "Tanpa promo": Arm null pada switch expression menampung kodePromo yang kosong; compiler menilai keutuhan arm terhadap nilai null juga.
  2. if (kodePromo is null): Bentuk pernyataan dari pola yang sama; cabang berjalan karena hasil pencarian promo teh memang kosong.
  3. if (kupon is not null): Negasi pola mengangkat state di dalam blok, sehingga kupon bisa dipakai tanpa pemeriksaan tambahan.
  4. isi is not null and string teks: Pola null digabung dengan type pattern lewat operator and; urutan ini menjamin teks terikat hanya bila nilai benar-benar string terisi.
  5. _ => $"Promo aktif: {kodePromo}": Arm discard menampung kode promo lain, dan compiler mengizinkan pemakaian kodePromo di sini tanpa pemeriksaan karena nilai null sudah ditampung arm pertama.

Pola null di Dalam Pola Lain #

Pola null juga menempel pada property pattern dan positional pattern, misalnya { Pembeli: null } untuk pesanan tanpa pembeli. Kombinasi semacam ini membuat aturan kekosongan terbaca sebagai bagian dari aturan bentuk data, bukan percabangan terpisah.