Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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 struct UserProfile dengan dua field privat: username (String) dan age (u32). Struct itu sendiri harus bersifat publik, tetapi field-nya harus tetap privat. Implementasikan constructor publik new yang 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, buat UserProfile, 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: 25

Kamu 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}
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Rust online