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.
Görev
KolayGetter 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 birUserProfileyapısı (struct) tanımlayın:username(String) veage(u32). Yapının kendisi genel (public) olmalı, ancak alanlar özel kalmalıdır. Bir kullanıcı adı ve yaş alan genel birnewyapı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, birUserProfileoluş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}
}
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
1Metotlar ve Davranış
Uygulama Bloklarına GirişSelf ParametresiDeğiştirilebilir Metotlarİlişkili FonksiyonlarBirden Fazla Uygulama BloğuMetot ZincirlemeÖzet - Dikdörtgen Eylemleri4Proje: Sanal Evcil Hayvan
Evcil Hayvanı TanımlamaEvcil Hayvanı Besleme2Kapsülleme ve Modüller
Modül TemelleriPublic Anahtar KelimesiPrivate AlanlarGetter'larSetter'larÖzet - Güvenli Kasa5Generic Yapılar
Generic Struct'larGeneric MetotlarÇoklu Generic TürlerGeneric FonksiyonlarÖzet - Koordinat Noktası8Sınırlandırıcı Olarak Trait'ler
Trait Sınırlandırıcı SözdizimiÇoklu SınırlandırıcılarWhere CümleciğiTrait'ler ile Tip DöndürmeÖzet - Generic Yazıcı11Rust'ta Tasarım Kalıpları
Newtype KalıbıKompozisyonDrop Trait'iFrom ve IntoÖzet - Smart Pointer Mock3İleri Seviye Enum'lar
Veri İçeren Enum'larEnum MetotlarıVeri Varyantlarını EşlemeOption Enum'ına Yeniden BakışÖzet - Shape Enum6Trait Tanımlama
Trait Nedir?Traitleri UygulamaVarsayılan UygulamalarVarsayılanları Geçersiz KılmaParametreli TraitlerÖzet - Media Player