Anonymous method pada bab sebelumnya memakan empat baris hanya untuk menyatakan satu syarat perbandingan. Lambda expression memadatkan pola yang sama menjadi satu baris: parameter, panah =>, lalu isi. Compiler menerjemahkan lambda menjadi instance delegate biasa, sehingga seluruh materi delegate yang sudah kita pelajari tetap berlaku.

Dari Anonymous Method ke Lambda #

Perbandingan delegate (int harga) { return harga < 20000; } dan harga => harga < 20000 menghasilkan instance delegate dengan perilaku identik. Tipe parameter tidak ditulis karena compiler menyimpulkannya dari tipe variabel target, yaitu Predicate<int>. Bentuk paling ringkas inilah yang dipakai luas di API modern .NET, termasuk LINQ yang akan kita jumpai di section tersendiri.

Panah => dibaca “menuju”: harga => harga < 20000 berarti dari parameter harga menuju hasil perbandingan. Selain menjadi delegate, lambda satu ekspresi juga dapat dikompilasi menjadi pohon ekspresi; dua wajah inilah yang membuat lambda menjadi bahan utama LINQ. Untuk section ini, kita cukup memakai wajah delegate-nya.

csharp
List<int> hargaBelanja = new() { 15000, 32000, 8500 };

Predicate<int> hemat = harga => harga < 20000;
Action<int> tampilkan = harga =>
    Console.WriteLine($"Harga {harga} masuk kategori hemat");

foreach (int harga in hargaBelanja)
{
    if (hemat(harga))
    {
        tampilkan(harga);
    }
}

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 3: harga => harga < 20000 adalah lambda satu parameter. Parameter harga tidak bertipe eksplisit karena compiler menyimpulkan int dari Predicate<int>.
  2. Baris 4-5: Lambda kedua ditugaskan ke Action<int>. Body-nya hanya satu panggilan Console.WriteLine, sehingga tanda kurawal dan return tidak diperlukan.
  3. Baris 7-13: Pemakaian di loop identik dengan bab anonymous method; keduanya menghasilkan output yang sama persis untuk data yang sama.

Dua lambda di atas sekaligus menunjukkan dua bentuk body: ekspresi tunggal untuk syarat hemat, dan satu panggilan method untuk tampilkan. Ketika body mulai membutuhkan lebih dari satu statement, pilihlah statement lambda dengan blok kurawal, atau pindahkan logikanya ke method bernama.