Public Anahtar Kelimesi
Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 9 / 61.
Önceki derste, kodu ayrı modül dosyalarına nasıl organize edeceğinizi öğrendiniz. Ancak, main.rs dosyasından Player struct'ını kullanmaya çalışırsanız, bir derleyici hatasıyla karşılaşırsınız. Bunun nedeni, bir Rust modülündeki her şeyin varsayılan olarak özel (private) olmasıdır.
Öğeleri modüllerinin dışından erişilebilir hale getirmek için, onları açıkça pub anahtar kelimesiyle 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 —yapının kendisinde, her bir alanda ve yöntemde— nasıl göründüğüne dikkat edin. Her öğenin kendi görünürlük bildirimine ihtiyacı vardır.
Struct üzerinde pub olmadan, diğer dosyalar türü isimlendiremez bile. Alanlar üzerinde pub olmadan, veriye doğrudan erişemezler. Metotlar üzerinde pub olmadan, onları çağıramazlar.
Şimdi main.rs içerisinde, modülün genel (public) öğelerini kullanabilirsiniz:
// main.rs
mod player;
use player::Player;
fn main() {
let p = Player::new(String::from("Alice"));
println!("{}", p.name);
}
use ifadesi, Player'ı kapsama dahil eder, böylece her seferinde player::Player yazmanıza gerek kalmaz. Bu varsayılan olarak gizlilik (privacy-by-default) yaklaşımı kasıtlıdır; sizi, kodunuzun hangi bölümlerinin dış dünyaya açılması gerektiği konusunda dikkatlice düşünmeye teşvik eder.
Görev
KolayKodunuzu iki dosya arasında düzenleyerek ve doğru öğeleri ana programınızdan kullanılabilecek şekilde genel (public) hale getirerek basit bir ürün kataloğu oluşturalım.
İki dosya oluşturacaksınız:
product.rs: İki alanı olan birProductstruct'ı tanımlayın:name(String) veprice(f64). Bir isim ve fiyat alan ve yeni birProductdöndürennewadında ilişkili bir fonksiyon ekleyin. Modül dışından erişilebilmeleri için struct'ı, alanlarını ve metodu public olarak işaretlemeyi unutmayın.main.rs: Ürün modülünü bildirin, biruseifadesiyleProductyapısını kapsama dahil edin, ardından bir ürün oluşturun ve detaylarını yazdırın.
pub anahtar kelimesine nerede ihtiyacınız olduğunu dikkatlice düşünün; struct'ın kendisinin görünür olması, alanların okuma için erişilebilir olması ve yapıcı (constructor) metodun main.rs dosyasasından çağrılabilir olması gerekir.
Çıktınız tam olarak şu formatta olmalıdır:
Product: {name}, Price: ${price}Örneğin, "Laptop" isminde ve 999.99 fiyatında bir ürün oluşturursanız, çıktı şöyle olacaktır:
Product: Laptop, Price: $999.99İki girdi alacaksınız: ürün adı ve fiyat.
Kopya kağıdı
Rust'ta, bir modüldeki her şey varsayılan olarak özeldir (private). Öğeleri modüllerinin dışından erişilebilir hale getirmek için pub anahtar kelimesini kullanın.
Struct'ları, alanları ve metotları genel (public) olarak işaretleyin:
// player.rs
pub struct Player {
pub name: String,
pub score: u32,
}
impl Player {
pub fn new(name: String) -> Player {
Player { name, score: 0 }
}
}
Her öğenin kendi görünürlük bildirimine ihtiyacı vardır:
- Struct üzerindeki
pubtürü görünür kılar - Alanlar üzerindeki
pubverilere doğrudan erişim sağlar - Metotlar üzerindeki
pubonların çağrılmasına izin verir
Öğeleri kapsama (scope) dahil etmek için use ifadesini kullanın:
// main.rs
mod player;
use player::Player;
fn main() {
let p = Player::new(String::from("Alice"));
println!("{}", p.name);
}
Kendin dene
// Ürün modülünü tanımla
mod product;
// TODO: Bir use ifadesi ile Product'ı kapsama dahil et
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.
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