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 #

csharp
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:

text
Kopi Gayo (Rp45000)
Potongan: 9000
Potongan via lambda: 9000

Bedah Kode Baris per Baris #

Mari kita telaah kode di atas:

  1. Baris 6: Label adalah expression-bodied property. Tanda => menggantikan blok get, dan ekspresi interpolasi menjadi nilai yang dikembalikan setiap kali properti dibaca.
  2. Baris 8: Diskon adalah expression-bodied method. Bentuk Diskon(int persen) => ... setara dengan method biasa yang berisi satu return.
  3. Baris 10: Lambda potongan memakai panah yang sama dengan makna yang sama: parameter menuju hasil. Bedanya, lambda hidup sebagai objek Func, sedangkan member menempel pada class Produk.
  4. Baris 12-14: kopi.Diskon(20) dan potongan(kopi.Harga, 20) menghasilkan 9000 yang 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.