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.

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.

csharp
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:

text
Harga 15000 masuk kategori hemat
Harga 8500 masuk kategori hemat

Bedah Kode Baris per Baris #

Mari kita telaah kode di atas:

  1. Baris 1: Tiga harga menjadi data uji untuk syarat yang sama.
  2. Baris 3-6: Ekspresi delegate (int harga) { ... } membentuk anonymous method. Variabel hemat bertipe Predicate<int>, sehingga method ini wajib mengembalikan bool.
  3. Baris 5: Keyword return wajib ditulis karena blok isi mengerjakan perhitungan, bukan satu ekspresi utuh.
  4. Baris 8-14: Loop memanggil hemat untuk setiap harga. Dua harga di bawah 20000 lolos syarat dan barisnya tercetak; harga 32000 tidak 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.