Filter “hemat” pada daftar belanja sering dipakai hanya di satu tempat. Mendeklarasikan method terpisah untuk logika sekali pakai membuat class penuh nama-nama pembantu yang jangkauannya sempit. C# 2 memperkenalkan anonymous method: ekspresi delegate yang ditulis langsung di tempat penugasan, tanpa nama method.
Menulis Delegate Tanpa Nama #
Anonymous method ditulis dengan keyword delegate, diikuti daftar parameter dan blok isi method. Tipe parameter dituliskan secara eksplisit, dan compiler menghubungkan bentuknya ke tipe delegate variabel target. Hasilnya adalah instance delegate biasa, sehingga cara pemanggilan dan penyimpanannya sama persis dengan bab sebelumnya.
Dari sisi runtime, compiler memperlakukan anonymous method sebagai method privat yang namanya digenerate otomatis, lengkap dengan akses ke variabel di sekitarnya. Tidak ada biaya khusus dibanding method bernama; yang berubah hanyalah tempat deklarasi. Kode di bawah menuliskan syarat hemat langsung di titik variabel hemat dideklarasikan.
List<int> hargaBelanja = new() { 15000, 32000, 8500 };
Predicate<int> hemat = delegate (int harga)
{
return harga < 20000;
};
foreach (int harga in hargaBelanja)
{
if (hemat(harga))
{
Console.WriteLine($"Harga {harga} masuk kategori hemat");
}
}Output yang Dihasilkan:
Harga 15000 masuk kategori hemat
Harga 8500 masuk kategori hematBedah Kode Baris per Baris #
Mari kita telaah kode di atas:
- Baris 1: Tiga harga menjadi data uji untuk syarat yang sama.
- Baris 3-6: Ekspresi
delegate (int harga) { ... }membentuk anonymous method. VariabelhematbertipePredicate<int>, sehingga method ini wajib mengembalikanbool. - Baris 5: Keyword
returnwajib ditulis karena blok isi mengerjakan perhitungan, bukan satu ekspresi utuh. - Baris 8-14: Loop memanggil
hematuntuk setiap harga. Dua harga di bawah 20000 lolos syarat dan barisnya tercetak; harga32000tidak lolos dan tidak mencetak apa pun.
Nama hemat memindahkan pertanyaan “apa syaratnya” dari daftar method class ke titik pemakaian. Ketika syarat berubah, kita menyunting satu tempat yang berdekatan dengan pemakaiannya, sehingga risiko lupa memperbarui method pembantu di file lain menurun. Namun begitu logika yang sama dibutuhkan di lebih dari satu tempat, kembalilah ke method bernama agar logika berdiri di satu rumah.