Getter'lar
Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 11 / 61.
Özel alanlarla, harici kod yapınızın verilerine doğrudan erişemez. Ancak bazen başkalarının verileri değiştirme yetkisi vermeden verileri okumasına izin vermeniz gerekir. İşte getter metotları bu noktada devreye girer.
Getter, özel bir alana başvuru döndüren public 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() yöntemi &self (salt okunur erişim) alır ve private 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 bakiyeyi şu yöntem aracılığıyla okuyabilir:
// main.rs
mod wallet;
use wallet::Wallet;
fn main() {
let w = Wallet::new(100.0);
println!("Balance: {}", w.balance()); // Çalışıyor!
}
String gibi sahip olunan verileri içeren alanlar için gereksiz kopyalamadan kaçınmak amacıyla genellikle bir referans döndürürsün:
pub fn name(&self) -> &String {
&self.name
}
Getter'lar, alanın kendisini korurken kontrollü okuma erişimi sağlar. Struct, verilerinin sorumluluğunu elinde tutar: harici kod verileri görebilir, ancak onlara dokunamaz.
Görev
KolayÖzel verilere kontrollü okuma erişimi sağlayan alıcı yöntemlerin nasıl çalıştığı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 alana sahip birUserProfileyapısı tanımlayın:username(String) veage(u32). Yapının kendisi herkese açık olmalı, ancak alanlar özel kalmalıdır. Bir kullanıcı adı ve yaş alan herkese açık birnewkurucusu uygulayın. Ardından iki alıcı yöntemi 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ü içe aktarın, birUserProfileoluşturun ve kullanıcının bilgilerini yazdırmak için alıcı yöntemleri kullanın.
Rust'ta alıcıların genellikle alanın kendisinden sonra adlandırıldığını unutmayın: get_ ön ekine gerek yoktur. String alanları için gereksiz kopyalamayı önlemek amacıyla bir referans döndürün.
Çıktınız tam olarak şu biçimi izlemelidir:
Username: {username}
Age: {age}Örneğin, kullanıcı adı "alice" ve yaşı 25 olan bir profil oluşturursanız çıktı şöyle olur:
Username: alice
Age: 25İki girdi alacaksınız: kullanıcı adı ve yaş.
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ı kullanarak bir UserProfile oluştur
// TODO: Kullanıcı adını ve yaşı yazdırmak için getter metodlarını kullan
// Biçim:
// Username: {username}
// Yaş: {age}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama 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 PlayerKendi başına pratik yap: Online Rust derleyicisi