Menu
Coddy logo textTech

Getter'lar

Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 11 / 61.

Özel alanlar (private fields) ile harici kod, yapınızın (struct) verilerine doğrudan erişemez. Ancak bazen, başkalarına veriyi değiştirme yetkisi vermeden veriyi okuma izni vermeniz gerekir. İşte burada getter metotları devreye girer.

Bir getter, basitçe özel bir alana referans döndüren genel bir metottur:

// 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
    }
}

balance() metodu &self (salt okunur erişim) alır ve özel alanın değerini döndürür. Rust'ta, getter'lar genellikle alanın kendisinden sonra adlandırılır; get_ önekine gerek yoktur.

Artık harici kod, bakiye bilgisini şu yöntemle okuyabilir:

// main.rs
mod wallet;
use wallet::Wallet;

fn main() {
    let w = Wallet::new(100.0);
    println!("Balance: {}", w.balance());  // Çalışır!
}

String gibi sahipli veri içeren alanlar için, gereksiz kopyalamadan kaçınmak amacıyla genellikle bir referans döndürürsünüz:

pub fn name(&self) -> &String {
    &self.name
}

Getter'lar, alanın kendisini korurken size kontrollü okuma erişimi sağlar. Struct, verisinin kontrolünü elinde tutmaya devam eder; harici kod bakabilir ama dokunamaz.

challenge icon

Görev

Kolay

Getter metotlarının özel verilere kontrollü okuma erişimini nasıl sağladığını gösteren bir kullanıcı profili sistemi oluşturalım.

Kodunuzu düzenlemek için iki dosya oluşturacaksınız:

  • profile.rs: İki özel (private) alana sahip bir UserProfile yapısı (struct) tanımlayın: username (String) ve age (u32). Yapının kendisi genel (public) olmalı, ancak alanlar özel kalmalıdır. Bir kullanıcı adı ve yaş alan genel bir new yapıcı metodu (constructor) uygulayın. Ardından iki getter metodu ekleyin:
    • username — kullanıcı adına bir referans döndürür (&String)
    • age — yaş değerini döndürür (u32)
  • main.rs: Profil modülünüzü dahil edin, bir UserProfile oluşturun ve kullanıcının bilgilerini yazdırmak için getter metotlarını kullanın.

Rust'ta getter metotlarının genellikle alanın adıyla aynı şekilde adlandırıldığını unutmayın; get_ öneki gerekmez. String alanları için, gereksiz kopyalamadan kaçınmak amacıyla bir referans döndürün.

Çıktınız tam olarak şu formatta olmalıdır:

Username: {username}
Age: {age}

Örneğin, "alice" kullanıcı adı ve 25 yaşıyla bir profil oluşturursanız, çıktı şöyle olacaktır:

Username: alice
Age: 25

İki girdi alacaksınız: kullanıcı adı ve yaş.

Kopya kağıdı

Bir getter metodu, özel (private) bir alana salt okunur erişim sağlayan genel (public) bir metottur.

Getter'lar, harici kodun veriyi doğrudan değiştiremeden görüntülemesine olanak tanır:

pub struct Wallet {
    balance: f64,
}

impl Wallet {
    pub fn new(initial: f64) -> Wallet {
        Wallet { balance: initial }
    }
    
    pub fn balance(&self) -> f64 {
        self.balance
    }
}

Rust'ta, getter'lar alanın kendisinden sonra adlandırılır; get_ öneki gerekmez.

String gibi sahipli veri içeren alanlar için, gereksiz kopyalamayı önlemek adına bir referans döndürün:

pub fn name(&self) -> &String {
    &self.name
}

Bir getter metodunun kullanımı:

let w = Wallet::new(100.0);
println!("Balance: {}", w.balance());

Kendin dene

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: Yapıcıyı (constructor) kullanarak bir UserProfile oluşturun

    // TODO: Kullanıcı adını ve yaşı yazdırmak için alıcı (getter) yöntemlerini kullanın
    // Biçim:
    // Username: {username}
    // Age: {age}
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Object Oriented Programming bölümündeki tüm dersler