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.
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:
Harga 15000 masuk kategori hemat
Harga 8500 masuk kategori hematBedah Kode Baris per Baris #
Mari kita telaah kode di atas:
- Baris 3:
harga => harga < 20000adalah lambda satu parameter. Parameterhargatidak bertipe eksplisit karena compiler menyimpulkanintdariPredicate<int>. - Baris 4-5: Lambda kedua ditugaskan ke
Action<int>. Body-nya hanya satu panggilanConsole.WriteLine, sehingga tanda kurawal danreturntidak diperlukan. - 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.