Syarat gratis ongkir cukup dinyatakan dengan satu perbandingan: total belanja minimal tertentu. Menulis blok statement untuk logika satu ekspresi terasa bertele-tele. Expression lambda menghilangkan kurawal dan keyword return; nilai ekspresi otomatis menjadi return value. Bentuk inilah yang paling sering kita temui di kode .NET modern, termasuk di dalam LINQ.

Expression lambda bukan sekadar gaya penulisan; bentuk ini membuka dua jalan kompilasi. Ditugaskan ke Func atau Action, lambda menjadi delegate yang dieksekusi. Ditugaskan ke Expression<Func<...>>, lambda menjadi data yang dianalisis. Section ini memakai jalur pertama, dan bab Expression Trees Introduction membuka jalur kedua.

Aturan menyusunnya pun konsisten: satu lambda menangani satu keputusan, satu lambda menangani satu transformasi. Kriteria gratis ongkir di bawah memakai pola tersebut untuk menguji total belanja terhadap minimal yang ditentukan.

Bentuk Ringkas Satu Ekspresi #

csharp
int totalBelanja = 180000;
int minimalGratisOngkir = 150000;

Func<int, bool> gratisOngkir = total => total >= minimalGratisOngkir;
Predicate<int> cekMinimal = MemenuhiMinimal;

if (gratisOngkir(totalBelanja) && cekMinimal(totalBelanja))
{
    Console.WriteLine("Gratis ongkir");
}
else
{
    Console.WriteLine("Belum memenuhi syarat");
}

static bool MemenuhiMinimal(int total) => total >= 150000;

Output yang Dihasilkan:

text
Gratis ongkir

Bedah Kode Baris per Baris #

Mari kita telaah kode di atas:

  1. Baris 4: total => total >= minimalGratisOngkir adalah expression lambda. Tanpa kurawal dan tanpa return, hasil perbandingan langsung menjadi return value untuk Func<int, bool>.
  2. Baris 5: Method group MemenuhiMinimal menunjukkan alternatif lambda: keduanya berperilaku sama sebagai delegate bool.
  3. Baris 7-12: Kedua delegate dipanggil dengan totalBelanja = 180000. Nilai itu melampaui 150000, sehingga kedua uji bernilai true dan cabang if mencetak Gratis ongkir.
  4. Baris 4 dan 5 berdampingan: Lambda membaca variabel minimalGratisOngkir dari sekitarnya; mekanisme penangkapan ini dibedah pada bab Closure.

Kombinasi && pada baris uji menumpuk dua syarat yang kebetulan bernilai sama; dalam praktik, dua sumber minimal biasanya berbeda. Yang perlu dibawa pulang adalah bentuknya: satu ekspresi per lambda, satu tanggung jawab per variabel.