Public Anahtar Kelimesi
Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 9 / 61.
Önceki derste kodu ayrı modül dosyaları içinde nasıl düzenleyeceğinizi öğrendiniz. Ancak main.rs içinden Player struct'ını kullanmayı denerseniz bir derleyici hatasıyla karşılaşırsınız. Bunun nedeni, bir Rust modülündeki her şeyin varsayılan olarak özel olmasıdır.
Öğeleri modüllerinin dışından erişilebilir hâle getirmek için onları pub anahtar sözcüğüyle açıkça işaretlemelisiniz:
// player.rs
pub struct Player {
pub name: String,
pub score: u32,
}
impl Player {
pub fn new(name: String) -> Player {
Player { name, score: 0 }
}
}
pub ifadesinin birden fazla yerde göründüğüne dikkat edin: yapının kendisinde, her alanda ve yöntemde. Her öğenin kendi görünürlük bildirimine ihtiyacı vardır.
Yapı üzerinde pub olmadan diğer dosyalar türe adını bile veremez. Alanlar üzerinde pub olmadan verilere doğrudan erişemezler. Metotlar üzerinde pub olmadan bunları çağıramazlar.
Şimdi main.rs içinde modülün herkese açık öğelerini kullanabilirsin:
// main.rs
mod player;
use player::Player;
fn main() {
let p = Player::new(String::from("Alice"));
println!("{}", p.name);
}
use ifadesi, Player öğesini kapsama getirir; böylece her seferinde player::Player yazmanız gerekmez. Varsayılan olarak gizlilik sağlayan bu yaklaşım bilinçlidir. Kodunuzun hangi bölümlerinin dış dünyaya açılması gerektiği üzerine dikkatlice düşünmenizi teşvik eder.
Görev
KolayKodunuzu iki dosyada düzenleyerek ve ana programınızdan kullanılabilmeleri için doğru öğeleri herkese açık hâle getirerek basit bir ürün kataloğu oluşturalım.
İki dosya oluşturacaksınız:
product.rs: İki alana sahip birProductyapısı tanımlayın:name(String) veprice(f64). Bir ad ve fiyat alan ve yeni birnewdöndürenProductadlı ilişkili bir işlev ekleyin. Yapının, alanlarının ve metodun modül dışından erişilebilmesi için bunları herkese açık olarak işaretlemeyi unutmayın.main.rs: Ürün modülünü bildirin, birProductifadesiyleuseöğesini kapsama alanına alın, ardından bir ürün oluşturup ayrıntılarını yazdırın.
pub anahtar sözcüğüne nerelerde ihtiyaç duyduğunuzu dikkatlice düşünün: yapının kendisinin görünür olması, alanlara okunmak üzere erişilebilmesi ve kurucu metodun main.rs dosyasından çağrılabilmesi gerekir.
Çıktınız şu tam biçimi izlemelidir:
Product: {name}, Price: ${price}Örneğin, adı "Laptop" ve fiyatı 999.99 olan bir ürün oluşturursanız çıktı şu şekilde olur:
Product: Laptop, Price: $999.99İki girdi alacaksınız: ürün adı ve fiyat.
Kendin dene
// product modülünü bildir
mod product;
// TODO: Product'ı bir use ifadesiyle kapsama al
fn main() {
// Girdiyi oku
let mut name = String::new();
std::io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
let mut price_input = String::new();
std::io::stdin().read_line(&mut price_input).expect("Failed to read line");
let price: f64 = price_input.trim().parse().expect("Failed to parse price");
// TODO: Product::new fonksiyonunu kullanarak yeni bir Product oluştur
// TODO: Ürün detaylarını şu formatta yazdır:
// Product: {name}, Price: ${price}
}
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