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
getditulisget => ekspresi;, dan hasil evaluasi ekspresi menjadi nilai yang dikembalikan. - Aksesor
setditulisset => penugasan;, dan ekspresi tersebut biasanya menyalinvalueke backing field. - Property read-only dapat memakai bentuk paling ringkas tanpa kata
get, misalnyapublic 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 #
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:
Nomor: F-2024-01
Total: Rp100000
Nomor baru: F-2024-02Mari kita bedah baris demi baris:
get => nomor;: aksesorgetsatu baris mengembalikan isi fieldnomor; katareturntidak diperlukan karena=>sudah berarti hasil ekspresi dikembalikan.set => nomor = value;: aksesorsetsatu baris menyalinvalueke fieldnomor; penugasan menjadi ekspresi tersendiri di sisi kanan=>.public int TotalHarga => hargaSatuan * jumlah;: property read-only tanpa aksesorgeteksplisit; setiap pembacaan menghitung ulang perkalian kedua field, sebagaimana property computed pada bab berikutnya.faktur.Nomor = "F-2024-02";: penugasan tetap memanggil aksesorset; bentuk ringkas tidak mengubah cara pemanggilan dari kode luar sedikit pun.