Getter & Setter
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah membaca halaman ini, kamu diharapkan dapat:
- Menjelaskan fungsi dari Getter dan Setter.
- Membuat method
getdansetdengan sintaks modern di TypeScript. - Menambahkan validasi keamanan data di dalam method
set.
Pendahuluan
Section titled “Pendahuluan”Di halaman Enkapsulasi, kita belajar cara melindungi properti private dengan membuat method public seperti getSaldo() dan tarikUang().
TypeScript menyediakan cara yang lebih modern dan elegan untuk membaca dan menulis properti private seolah-olah kita sedang berinteraksi dengan properti biasa, yaitu menggunakan kata kunci get dan set.
Penjelasan Materi: Getter & Setter Modern
Section titled “Penjelasan Materi: Getter & Setter Modern”Sintaks penulisan di TypeScript menggunakan kata kunci get dan set sebelum nama method:
class Siswa { private _nama: string = "";
// 1. Getter (untuk mengambil data) get nama(): string { return this._nama; }
// 2. Setter (untuk mengubah data) set nama(nilaiBaru: string) { this._nama = nilaiBaru; }}Dari luar class, kita menggunakannya seperti variabel biasa tanpa menggunakan tanda kurung ():
const s = new Siswa();s.nama = "Putra"; // memanggil setter otomatisconsole.log(s.nama); // memanggil getter otomatisAnalogi Kehidupan Sehari-hari: Petugas Pengambil & Pengubah Berkas
Section titled “Analogi Kehidupan Sehari-hari: Petugas Pengambil & Pengubah Berkas”Bayangkan kamu ingin melihat atau mengubah data rapor di ruang arsip:
Getter = Petugas Pengambil Berkas
Section titled “Getter = Petugas Pengambil Berkas”Kamu dilarang masuk ke ruang arsip untuk mengambil rapor sendiri. Kamu mendatangi loket dan berkata: “Tolong ambilkan rapor saya.” Petugas (Getter) masuk ke dalam, mengambil berkas, lalu menyerahkannya kepadamu.
Getter = Petugas yang mengambil data dari dalam ruang rahasiaSetter = Petugas Pengubah Berkas
Section titled “Setter = Petugas Pengubah Berkas”Kamu ingin mengubah alamat di rapor. Kamu tidak boleh menulis langsung di rapor tersebut. Kamu menyerahkan formulir alamat baru kepada petugas (Setter). Petugas memeriksa keabsahan tanda tanganmu (validasi), lalu ia sendiri yang menuliskan alamat baru tersebut di dalam berkas rapor asli.
Setter = Petugas yang memeriksa dan menuliskan data baru ke ruang rahasiaVisual Illustration: Alur Kerja Getter & Setter
Section titled “Visual Illustration: Alur Kerja Getter & Setter”AKSES DARI LUAR AKSI DI DALAM CLASSsiswa.nilai = 80 ───► memanggil set nilai(80) ──► lakukan validasi ──► _nilaiUjian = 80 │console.log(siswa.nilai) ◄───┴── memanggil get nilai() ◄── return _nilaiUjianMari Mencoba: Getter & Setter Terproteksi
Section titled “Mari Mencoba: Getter & Setter Terproteksi”Mari kita buat program class RekeningKoperasi yang memproteksi perubahan saldo menggunakan getter dan setter.
Buat file bernama src/bab8/getter-setter.ts:
class RekeningKoperasi { // Properti internal dilindungi dengan underscore (_) private _saldo: number = 0;
constructor(public namaPemilik: string) {}
// 1. Getter untuk membaca saldo get saldo(): number { return this._saldo; }
// 2. Setter untuk mengubah saldo dengan validasi keamanan set saldo(jumlahBaru: number) { if (jumlahBaru < 0) { console.log("⚠ Gagal Set: Saldo tidak boleh negatif!"); return; } this._saldo = jumlahBaru; console.log(`✓ Saldo ${this.namaPemilik} diperbarui menjadi: Rp${this._saldo}`); }}
const tabungan = new RekeningKoperasi("Putra Ramadhan");
// Memanggil SETTER (secara otomatis lewat tanda =)tabungan.saldo = 50000; // ✓ Berhasiltabungan.saldo = -10000; // ⚠ Ditolak oleh validasi setter!
// Memanggil GETTER (secara otomatis saat dibaca)console.log(`\nSaldo Akhir: Rp${tabungan.saldo}`); // tanpa kurung kurung ()Jalankan dengan perintah:
tsx src/bab8/getter-setter.tsOutput
Section titled “Output”✓ Saldo Putra Ramadhan diperbarui menjadi: Rp50000⚠ Gagal Set: Saldo tidak boleh negatif!
Saldo Akhir: Rp50000Penjelasan Baris per Baris
Section titled “Penjelasan Baris per Baris”get saldo(): number— mendefinisikan method pembaca properti. Memiliki tipe return data.set saldo(jumlahBaru: number)— mendefinisikan method penulis properti. Menerima tepat satu parameter nilai baru.tabungan.saldo = 50000— meskipun terlihat seperti pengisian variabel biasa, baris ini sebenarnya menjalankan methodset saldo(50000).tabungan.saldo— dibaca seperti variabel biasa, tetapi menjalankan methodget saldo().
Kesalahan yang Sering Terjadi
Section titled “Kesalahan yang Sering Terjadi”❌ Menuliskan tipe return pada method Setter
Section titled “❌ Menuliskan tipe return pada method Setter”set saldo(nilai: number): void { ... } // Error di TypeScript!// Setters cannot have a return type annotation.Perbaikan: Method setter dilarang menuliskan tipe return (: void atau tipe lainnya) karena ia hanya bertugas menulis data, bukan mengembalikan hasil.
Latihan
Section titled “Latihan”- Buat class
SiswaNilaidengan properti private_nilai: number = 0. - Buat getter
nilaiyang mengembalikan_nilai. - Buat setter
nilaiyang menolak jika nilai kurang dari 0 atau lebih dari 100. - Buat objeknya dan lakukan pengisian data.
Ringkasan
Section titled “Ringkasan”- Getter (
get) digunakan untuk membaca properti secara terkontrol. - Setter (
set) digunakan untuk menulis/memperbarui properti dengan validasi. - Diakses menggunakan sintaks variabel biasa tanpa tanda kurung
(). - Setter dilarang mencantumkan anotasi tipe return.