Operator => lahir dari lambda, lalu C# memperluasnya ke anggota class: method dan property yang body-nya satu ekspresi boleh ditulis dengan bentuk yang sama. Gaya ini disebut expression-bodied members. Memahami keterkaitannya membantu kita membaca dua gaya penulisan yang kini berdampingan di kode .NET modern.
Pemakaian paling umum ada pada property hitungan dan method satu baris. Compiler menghasilkan IL yang sama dengan method biasa, sehingga perbedaannya murni di sumber kode: class pendek tetap pendek tanpa kebisingan sintaks tambahan. Karena itu, gaya ini paling pas untuk transformasi nilai yang pendek dan bebas efek samping.
Panah yang Sama di Lambda dan Member #
class Produk
{
public string Nama { get; init; }
public int Harga { get; init; }
public string Label => $"{Nama} (Rp{Harga})";
public int Diskon(int persen) => Harga * persen / 100;
}
Func<int, int, int> potongan = (harga, persen) => harga * persen / 100;
Produk kopi = new() { Nama = "Kopi Gayo", Harga = 45000 };
Console.WriteLine(kopi.Label);
Console.WriteLine($"Potongan: {kopi.Diskon(20)}");
Console.WriteLine($"Potongan via lambda: {potongan(kopi.Harga, 20)}");Output yang Dihasilkan:
Kopi Gayo (Rp45000)
Potongan: 9000
Potongan via lambda: 9000Bedah Kode Baris per Baris #
Mari kita telaah kode di atas:
- Baris 6:
Labeladalah expression-bodied property. Tanda=>menggantikan blokget, dan ekspresi interpolasi menjadi nilai yang dikembalikan setiap kali properti dibaca. - Baris 8:
Diskonadalah expression-bodied method. BentukDiskon(int persen) => ...setara dengan method biasa yang berisi satureturn. - Baris 10: Lambda
potonganmemakai panah yang sama dengan makna yang sama: parameter menuju hasil. Bedanya, lambda hidup sebagai objekFunc, sedangkan member menempel pada classProduk. - Baris 12-14:
kopi.Diskon(20)danpotongan(kopi.Harga, 20)menghasilkan9000yang sama, membuktikan bahwa expression-bodied member dan lambda hanya berbeda tempat tinggalnya, bukan cara menghitung.
Batasi panah untuk body satu ekspresi: expression-bodied tidak menerima statement, sehingga if-else di dalam body wajib ditulis ulang sebagai ternary atau dipindahkan ke method biasa.