Getter
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 11 dari 61.
Dengan field privat, kode eksternal tidak dapat mengakses data struct-mu secara langsung. Namun, terkadang kamu perlu mengizinkan orang lain untuk membaca data tanpa memberi mereka kemampuan untuk mengubahnya. Di sinilah method getter berperan.
Getter hanyalah method publik yang mengembalikan referensi ke field privat:
// wallet.rs
pub struct Wallet {
balance: f64,
}
impl Wallet {
pub fn new(initial: f64) -> Wallet {
Wallet { balance: initial }
}
pub fn balance(&self) -> f64 {
self.balance
}
}
method balance() menerima &self (akses hanya-baca) dan mengembalikan nilai field privat. Di Rust, getter biasanya diberi nama sesuai dengan field itu sendiri: tidak perlu awalan get_.
Sekarang kode eksternal dapat membaca saldo melalui method:
// main.rs
mod wallet;
use wallet::Wallet;
fn main() {
let w = Wallet::new(100.0);
println!("Balance: {}", w.balance()); // Berhasil!
}
Untuk field yang berisi data yang dimiliki seperti String, kamu sering kali mengembalikan referensi untuk menghindari penyalinan yang tidak perlu:
pub fn name(&self) -> &String {
&self.name
}
Getter memberimu akses baca yang terkontrol sekaligus menjaga field tetap terlindungi. Struct tetap mengendalikan datanya: kode eksternal bisa melihat, tetapi tidak bisa menyentuhnya.
Tantangan
MudahMari kita buat sistem profil pengguna yang menunjukkan cara method getter menyediakan akses baca yang terkontrol ke data privat.
Kamu akan membuat dua file untuk mengatur kodemu:
profile.rs: Definisikan structUserProfiledengan dua field privat:username(String) danage(u32). Struct itu sendiri harus bersifat publik, tetapi field-nya harus tetap privat. Implementasikan constructor publiknewyang menerima username dan usia. Lalu tambahkan dua method getter:username: mengembalikan referensi ke username (&String)age: mengembalikan nilai usia (u32)
main.rs: Masukkan module profilmu, buatUserProfile, lalu gunakan method getter untuk mencetak informasi pengguna.
Ingat bahwa getter di Rust biasanya dinamai sesuai dengan field itu sendiri: tidak perlu awalan get_. Untuk field String, kembalikan referensi agar tidak perlu menyalin data.
Output-mu harus mengikuti format persis berikut:
Username: {username}
Age: {age}Misalnya, jika kamu membuat profil dengan username "alice" dan usia 25, output-nya akan menjadi:
Username: alice
Age: 25Kamu akan menerima dua input: username dan usia.
Coba sendiri
mod profile;
use profile::UserProfile;
fn main() {
let mut input1 = String::new();
std::io::stdin().read_line(&mut input1).expect("Failed to read line");
let username = input1.trim().to_string();
let mut input2 = String::new();
std::io::stdin().read_line(&mut input2).expect("Failed to read line");
let age: u32 = input2.trim().parse().expect("Failed to parse age");
// TODO: Buat UserProfile menggunakan konstruktor
// TODO: Gunakan method getter untuk mencetak username dan age
// Format:
// Nama pengguna: {username}
// Usia: {age}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Method dan Perilaku
Pengantar Blok ImplementasiParameter SelfMethod MutableFungsi TerkaitBeberapa Blok ImplementasiMethod BerantaiRangkuman: Aksi Persegi Panjang4Proyek: Hewan Peliharaan Virtual
Mendefinisikan Hewan PeliharaanMemberi Makan Hewan Peliharaan2Enkapsulasi dan module
Dasar-Dasar moduleKata Kunci publicField privateGetterSetterRekap: Loker AmanLatihan sendiri: Compiler Rust online