Bab Logical Pattern memperkenalkan operator and, or, dan not. Bab ini melangkah lebih jauh: pola-pola dari jenis berbeda dirangkai dalam satu expression, misalnya property pattern yang bergandengan relational pattern, list pattern yang memuat relational pattern karakter, dan kelompok kurung yang menetapkan prioritas. Kemampuan merangkai inilah yang membuat pattern matching terasa seperti bahasa kecil di dalam C#.
Kombinasi Lintas Jenis Pola #
Setiap posisi pola menerima pola lain, sehingga kedalaman kombinasi tidak dibatasi. Aturan praktisnya: pola luar menentukan bentuk data yang diuji, pola dalam menilai detailnya. Operator logis menyatukan pola sejenis, sedangkan property dan positional pattern menyatukan banyak syarat tanpa operator sama sekali.
Contoh: Status Katalog dan Validasi Kode #
public record Produk(string Nama, int Harga, int Stok);
List<Produk> katalog =
[
new Produk("Kopi Gayo", 85000, 12),
new Produk("Teh Melati", 45000, 0),
new Produk("Cokelat Lampung", 92000, 3)
];
foreach (Produk produk in katalog)
{
string status = produk switch
{
{ Stok: 0 } => "Habis",
{ Harga: >= 90000 } and { Stok: <= 5 } => "Premium stok tipis",
{ Stok: > 10 } => "Stok aman",
_ => "Tersedia terbatas"
};
Console.WriteLine($"{produk.Nama}: {status}");
}
int nilaiTagihan = 850000;
string kodeMasukan = "A17";
Console.WriteLine($"Syarat kirim gratis: {nilaiTagihan is >= 500000 and < 1000000}");
Console.WriteLine($"Kode valid: {kodeMasukan is ['A', >= '0' and <= '9', >= '0' and <= '9']}");Output yang Dihasilkan:
Kopi Gayo: Stok aman
Teh Melati: Habis
Cokelat Lampung: Premium stok tipis
Syarat kirim gratis: True
Kode valid: TrueMari kita bedah baris demi baris:
{ Stok: 0 }: Property pattern dengan constant pattern di dalamnya menangkap produk tanpa stok lebih dulu, sehingga arm lain tidak perlu mengantisipasi nol.{ Harga: >= 90000 } and { Stok: <= 5 }: Dua property pattern disatukan operatorand; bentuk ini alternatif dari{ Harga: >= 90000, Stok: <= 5 }dengan penekanan dua kelompok syarat.{ Stok: > 10 }dan_: Arm umum dan discard menampung sisa produk, sehingga setiap item katalog memperoleh satu label.nilaiTagihan is >= 500000 and < 1000000: Relational pattern berdiri sendiri sebagai syarat rentang, menghasilkan bool untuk penilaian tagihan.['A', >= '0' and <= '9', >= '0' and <= '9']: List pattern memuat satu constant pattern huruf dan dua relational pattern rentang karakter, memvalidasi format kode tanpa method tambahan.
Prioritas dan Tanda Kurung #
Operator not mengikat paling kuat, diikuti and, lalu or. Ketika ekspresi campuran semakin panjang, tanda kurung menjadi dokumentasi hidup: kelompok (>= 500 and <= 900) and not 700 pada bab Logical Pattern terbaca jelas karena rentangnya dibungkus. Pola yang sudah dalam juga boleh dipangkas dengan mengangkat syarat ke clause when atau method terpisah.