Discard pattern ditulis _ dan cocok dengan nilai apa pun tanpa mengikatnya ke variabel. Pola ini paling sering muncul sebagai arm terakhir switch expression, tetapi fungsinya lebih luas: menampung posisi yang tidak ditepati pada positional dan list pattern, serta menjadi bentuk eksplisit dari penanganan “selain itu”. Bab ini merangkum seluruh perannya.
Peran dalam Switch dan Pola Lain #
Dalam switch expression, arm _ menjamin keutuhan: setelah arm spesifik gagal tercapai, discard menampung sisanya sehingga compiler tidak menuntut arm tambahan. Dalam pola bersarang, _ menampung satu posisi, sedangkan .. menampung rentetan posisi pada list pattern. Nilai yang ditampung discard tidak bisa dibaca kembali; untuk itu gunakan var pattern.
Contoh: Kode, Kupon, dan Deconstruction #
int kode = 404;
string pesan = kode switch
{
200 => "Berhasil",
301 => "Pindah permanen",
404 => "Tidak ditemukan",
_ => "Kode lain"
};
Console.WriteLine(pesan);
string? kupon = null;
string efektif = kupon switch
{
"HEMAT20" => "Diskon 20 persen",
_ => "Tanpa kupon"
};
Console.WriteLine(efektif);
object lampiran = new object();
if (lampiran is not string _)
{
Console.WriteLine("Lampiran bukan string");
}
(int total, _) = (450000, "Bandung");
Console.WriteLine($"Total: {total}");Output yang Dihasilkan:
Tidak ditemukan
Tanpa kupon
Lampiran bukan string
Total: 450000Mari kita bedah baris demi baris:
_ => "Kode lain": Arm discard menampung seluruh kode di luar tiga konstanta, sehingga switch expression atasinttetap utuh._ => "Tanpa kupon": Nilainullpadakuponikut ditampung discard karena constant pattern"HEMAT20"tidak mencocokkannull.lampiran is not string _: Tipe pattern dengan discard menyatakan uji tipe tanpa mengikat; hasilnya hanya dipakai sebagai syarat percabangan.(int total, _) = (450000, "Bandung"): Pada deconstruction,_menjadi discard designator: posisi kedua tuple dibaca lalu dibuang, dan hanyatotalyang tersimpan.
_ sebagai Pattern dan sebagai Designator #
Karakter _ memiliki dua peran bergantung posisi. Di posisi pola dan deconstruction, _ adalah penampung tanpa nama. Bila kita mendeklarasikan variabel bernama _ secara eksplisit di lingkup yang sama, referensi berikutnya diperlakukan sebagai variabel biasa, sehingga disiplin penamaan _ hanya untuk penampung menjaga kode tetap jelas.