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 #
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:
Berat 1800 g, biaya kirim 26000
Predikat: Memuaskan
Kategori paket sedangMari kita bedah baris demi baris:
- Arm
<= 500,<= 1000,<= 2000: Arm dievaluasi berurutan, sehingga nilai1800lolos dua arm pertama dan terpilih pada arm ketiga; urutan menaik membuat tabel tarif terbaca seperti daftar harga. _ => 34000: Arm discard menampung berat di atas batas terakhir, sehingga switch expression tetap utuh tanpa cabang terbuka.>= 75 and < 90: Dua pola relational digabung operatorandmembentuk rentang tertutup-kiri; nilai84memenuhi keduanya.beratGram is > 1000 and <= 2000: Relational pattern bekerja pula pada operatoris, menggantikanberatGram > 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.