Constant pattern adalah bentuk pattern matching paling dasar: input dicocokkan dengan satu nilai konstanta. Bab Pattern Matching Dasar di section Control Flow sudah memperkenalkannya secara singkat; bab ini membedah konstanta apa saja yang sah, urutan penilaian arm, dan peran arm discard pada switch expression bertipe enum.
Konstanta yang Bisa Dicocokkan #
| Bentuk konstanta | Contoh pola |
|---|---|
| Literal angka | 0, 404, 1_000 |
| Literal teks dan karakter | "va-bca", 'A' |
| Literal bool | true, false |
| Anggota enum | StatusPesanan.Dikirim |
Konstanta const | BatasGratis |
| Null | null |
Konstanta harus bisa dinilai saat kompilasi, sehingga variabel biasa tidak boleh dipakai sebagai pola.
Contoh: Status, Metode Pembayaran, dan Ongkir #
public enum StatusPesanan { Baru, Dikirim, Selesai }
StatusPesanan status = StatusPesanan.Dikirim;
Console.WriteLine(status switch
{
StatusPesanan.Baru => "Menunggu pembayaran",
StatusPesanan.Dikirim => "Dalam perjalanan",
StatusPesanan.Selesai => "Tiba di tujuan",
_ => "Status tidak dikenal"
});
string metodeBayar = "va-bca";
string petunjuk = metodeBayar switch
{
"va-bca" => "Transfer ke VA BCA 8808 1234",
"qris" => "Pindai QRIS di halaman pembayaran",
_ => "Metode pembayaran tidak dikenal"
};
Console.WriteLine(petunjuk);
int kodeOngkir = 0;
if (kodeOngkir is 0)
{
Console.WriteLine("Ongkir gratis");
}Output yang Dihasilkan:
Dalam perjalanan
Transfer ke VA BCA 8808 1234
Ongkir gratisMari kita bedah baris demi baris:
- Arm anggota enum: Setiap arm mencocokkan satu anggota
StatusPesanandengan perbandingan nilai; compiler menilai arm dari atas ke bawah dan memakai arm pertama yang cocok. _ => "Status tidak dikenal": Arm discard menampung sisa nilai, termasuk angka enum yang tidak bernama; tanpa arm ini compiler memancarkan warning CS8524.- Arm literal teks: Perbandingan string pada pola memakai kesetaraan nilai, sama seperti operator
==untuk string. kodeOngkir is 0: Constant pattern bekerja pula di operatoris, sehingga pemeriksaan tunggal terbaca deklaratif tanpa blok switch.
Peran Arm Discard pada Enum #
Switch expression wajib menjangkau seluruh kemungkinan input. Enum dengan tiga anggota ternyata masih bisa menampung angka lain, misalnya hasil cast (StatusPesanan)3. Warning dari probe tanpa arm discard menunjukkan hal itu (path project dipangkas):
Program.cs(3,23): warning CS8524: The switch expression does not handle some values of its input type (it is not exhaustive) involving an unnamed enum value. For example, the pattern '(StatusPesanan)3' is not covered.