Kriteria penyaringan daftar belanja berubah-ubah: hari ini kita mencari item ber-kg, besok item berhuruf tertentu. Menulis method terpisah untuk setiap kriteria membuat kode membengkak. Lambda expression memecahkan masalah itu dengan menyatakan logika sebaris langsung di tempat penugasan, dan bab ini membedah anatomi sintaksnya secara rinci.

Lambda bukan tipe baru: compiler mengubahnya menjadi instance delegate atau pohon ekspresi, tergantung tipe target penugasannya. Karena itu, seluruh aturan delegate dari section Delegates dan Events tetap berlaku, termasuk keharusan cocoknya signature. Yang berubah hanyalah cara kita menuliskan isi fungsi kecil tersebut. Semakin ringkas penulisannya, semakin sering logika kecil ditulis di dekat pemakaiannya, dan itulah keunggulan praktis yang ditawarkan lambda dibanding method pembantu terpisah.

Anatomi Sintaks Lambda #

Sebuah lambda terdiri dari tiga bagian: daftar parameter, panah =>, dan body. Panah dibaca “menuju”, sehingga item => item.Length dibaca “dari item menuju panjang item”.

BentukContohKeterangan
Tanpa parameter() => "siap"untuk delegate tanpa argumen
Satu parameterx => x * 2tanda kurung boleh dilepas
Banyak parameter(a, b) => a + btanda kurung wajib
Tipe eksplisit(string s) => s.Lengthmembantu compiler dan pembaca
csharp
List<string> belanja = new() { "Beras 5 kg", "Gula 1 kg", "Telur" };

Action<string> cetak = item => Console.WriteLine($"Belanja: {item}");
Predicate<string> berkg = item => item.Contains("kg");

foreach (string item in belanja)
{
    if (berkg(item))
    {
        cetak(item);
    }
}

Output yang Dihasilkan:

text
Belanja: Beras 5 kg
Belanja: Gula 1 kg

Bedah Kode Baris per Baris #

Mari kita telaah kode di atas:

  1. Baris 3: Lambda item => Console.WriteLine(...) ditugaskan ke Action<string>. Compiler menyimpulkan item bertipe string dari tipe variabel target.
  2. Baris 4: Lambda kedua ditugaskan ke Predicate<string>, sehingga body-nya wajib bernilai bool. Ekspresi item.Contains("kg") memenuhi syarat itu.
  3. Baris 6-12: Loop menguji setiap item dengan berkg, lalu mencetak item yang lolos lewat cetak. Item Telur tidak mengandung “kg” dan tidak tercetak.

Pada baris berkg, tanda kurung parameter dilepas karena lambda hanya punya satu parameter tanpa tipe eksplisit. Begitu tipe dituliskan atau parameter menjadi dua, kurung wajib kembali, misalnya (string item) => item.Contains("kg") atau (a, b) => a + b.