Declaration pattern adalah nama resmi bentuk x is T x yang sudah kita pakai pada bab Type Pattern: pemeriksaan tipe yang sekaligus mendeklarasikan variabel terikat. Bab ini menekankan dua aturan yang membuatnya berbeda dari perbandingan biasa: definite assignment variabel yang diikat, dan perilaku bentuk negasi is not T x yang justru mengikat variabel pada cabang yang gagal.
Bentuk Positif dan Negatif #
Pola data is string teks mengikat teks hanya pada jalur ketika pencocokan berhasil. Bentuk negasi data is not string teks membaliknya: variabel teks terikat pada cabang ketika pola gagal, karena pada jalur itu data terbukti bertipe string. Aturan ini berguna saat kita ingin menangani kasus “bukan tipe yang diharapkan” tanpa pemeriksaan kedua.
Contoh: Lampiran dan Data #
object lampiran = "Bukti-Pembayaran.pdf";
if (lampiran is string namaFile)
{
Console.WriteLine($"Nama file: {namaFile.ToUpperInvariant()}");
}
object data = 120000;
if (data is not string teks)
{
Console.WriteLine($"Data bukan teks, tipe asli: {data.GetType().Name}");
}
else
{
Console.WriteLine($"Data teks: {teks}");
}
bool cocok = data is double desimal;
Console.WriteLine($"Cocok sebagai double: {cocok}");Output yang Dihasilkan:
Nama file: BUKTI-PEMBAYARAN.PDF
Data bukan teks, tipe asli: Int32
Cocok sebagai double: FalseMari kita bedah baris demi baris:
lampiran is string namaFile: Pencocokan berhasil karena tipe runtimestring, sehingga blok mendapatnamaFileyang siap dipakai.data is not string teks:databertipeint, sehingga pola negasi berhasil dan cabangifmenampung kegagalan pencocokan.else { Console.WriteLine($"Data teks: {teks}") }: Pada cabangelse, kegagalan pola berartidataadalahstring, dan di situlahteksterikat secara pasti.bool cocok = data is double desimal;: Hasil pencocokan disimpan sebagai bool, dandesimaltidak terikat di luar jalur berhasil.
Aturan Definite Assignment #
Variabel yang diikat pattern hanya pasti terisi di jalur tempat pola berhasil (atau gagal, untuk bentuk negasi). Probe memakai desimal setelah baris bool cocok = ... menghasilkan galat kompilasi berikut (path project dipangkas):
Program.cs(6,19): error CS0165: Use of unassigned local variable 'desimal'Galat CS0165 itu galat, bukan warning: compiler menolak program yang memakai variabel pattern di luar jalur terikatnya. Simpan hasilnya di variabel bool hanya bila kita memang tidak memakai nilai terikat tersebut.