Relational pattern menggantikan rantai if perbandingan dengan pola deklaratif: <= 500, > 1000, dan kombinasinya. Section Control Flow sudah memakainya pada switch expression untuk diskon; bab ini membedah mekanismenya, tipe yang didukung, serta padanan dengan when pada arm switch. Fitur ini tersedia sejak C# 9.

Bentuk dan Tipe yang Didukung #

Pola relational memakai empat operator: <, >, <=, dan >=, diikuti konstanta pembanding. Input dibandingkan dengan konstanta memakai perbandingan bawaan tipe, sehingga pola ini cocok untuk bilangan bulat, bilangan riil, char, dan anggota enum. Konstanta pembanding harus bisa dinilai saat kompilasi.

Contoh: Tarif Berat Paket #

csharp
int beratGram = 1800;

int biayaKirim = beratGram switch
{
    <= 500 => 10000,
    <= 1000 => 18000,
    <= 2000 => 26000,
    _ => 34000
};

Console.WriteLine($"Berat {beratGram} g, biaya kirim {biayaKirim}");

string predikat = 84 switch
{
    >= 90 => "Sangat memuaskan",
    >= 75 and < 90 => "Memuaskan",
    _ => "Perlu penilaian ulang"
};

Console.WriteLine($"Predikat: {predikat}");

if (beratGram is > 1000 and <= 2000)
{
    Console.WriteLine("Kategori paket sedang");
}

Output yang Dihasilkan:

text
Berat 1800 g, biaya kirim 26000
Predikat: Memuaskan
Kategori paket sedang

Mari kita bedah baris demi baris:

  1. Arm <= 500, <= 1000, <= 2000: Arm dievaluasi berurutan, sehingga nilai 1800 lolos dua arm pertama dan terpilih pada arm ketiga; urutan menaik membuat tabel tarif terbaca seperti daftar harga.
  2. _ => 34000: Arm discard menampung berat di atas batas terakhir, sehingga switch expression tetap utuh tanpa cabang terbuka.
  3. >= 75 and < 90: Dua pola relational digabung operator and membentuk rentang tertutup-kiri; nilai 84 memenuhi keduanya.
  4. beratGram is > 1000 and <= 2000: Relational pattern bekerja pula pada operator is, menggantikan beratGram > 1000 && beratGram <= 2000.

Relational pada Karakter dan Enum #

Perbandingan bawaan membuat pola karakter seperti >= '0' and <= '9' menguji rentang kode Unicode, dan pola enum seperti >= StatusPesanan.Dikirim mengikuti urutan deklarasi anggota. Kombinasi karakter semacam ini kita pakai kembali pada bab Pattern Combinators untuk memvalidasi kode.