Aksesor property yang isinya hanya satu pernyataan masih memakan empat baris bila ditulis sebagai blok lengkap. C# menyediakan bentuk ringkas bernama expression-bodied member: badan aksesor ditulis sebagai satu ekspresi setelah operator =>. Bab ini menerapkan bentuk tersebut pada property get, property set, dan property read-only yang seluruh badannya berupa satu ekspresi.

Masalah: Aksesor Satu Baris yang Memakan Tempat #

Property Nomor pada class Faktur hanya menyalin field nomor bolak-balik, tetapi bentuk blok menuntut kurung kurawal dan kata return untuk setiap aksesor. Ketika sebuah class memiliki banyak property sederhana, baris-baris seremonial itu menutupi logika yang sebenarnya penting. Kita butuh cara menulis aksesor satu baris tanpa kehilangan artinya.

Mekanisme Sintaks => #

Operator => menggantikan blok aksesor dengan satu ekspresi:

  • Aksesor get ditulis get => ekspresi;, dan hasil evaluasi ekspresi menjadi nilai yang dikembalikan.
  • Aksesor set ditulis set => penugasan;, dan ekspresi tersebut biasanya menyalin value ke backing field.
  • Property read-only dapat memakai bentuk paling ringkas tanpa kata get, misalnya public int TotalHarga => hargaSatuan * jumlah;.

Makna semantiknya sama persis dengan bentuk blok; compiler menghasilkan kode yang setara, sehingga pemilihan bentuk murni soal keterbacaan.

Contoh: Class Faktur #

csharp
public class Faktur
{
    private string nomor;
    private int hargaSatuan;
    private int jumlah;

    public Faktur(string nomor, int hargaSatuan, int jumlah)
    {
        this.nomor = nomor;
        this.hargaSatuan = hargaSatuan;
        this.jumlah = jumlah;
    }

    public string Nomor
    {
        get => nomor;
        set => nomor = value;
    }

    public int TotalHarga => hargaSatuan * jumlah;
}

Faktur faktur = new Faktur("F-2024-01", 25000, 4);
Console.WriteLine($"Nomor: {faktur.Nomor}");
Console.WriteLine($"Total: Rp{faktur.TotalHarga}");

faktur.Nomor = "F-2024-02";
Console.WriteLine($"Nomor baru: {faktur.Nomor}");

Output yang Dihasilkan:

text
Nomor: F-2024-01
Total: Rp100000
Nomor baru: F-2024-02

Mari kita bedah baris demi baris:

  1. get => nomor;: aksesor get satu baris mengembalikan isi field nomor; kata return tidak diperlukan karena => sudah berarti hasil ekspresi dikembalikan.
  2. set => nomor = value;: aksesor set satu baris menyalin value ke field nomor; penugasan menjadi ekspresi tersendiri di sisi kanan =>.
  3. public int TotalHarga => hargaSatuan * jumlah;: property read-only tanpa aksesor get eksplisit; setiap pembacaan menghitung ulang perkalian kedua field, sebagaimana property computed pada bab berikutnya.
  4. faktur.Nomor = "F-2024-02";: penugasan tetap memanggil aksesor set; bentuk ringkas tidak mengubah cara pemanggilan dari kode luar sedikit pun.