Rust
Public API
pub ile API'yi dışa açmayı öğrenirsin.
Public API
Alanları açık bırakmak, kütüphanenin iç yapısını kullanıcılara kilitler: alan adını değiştirmek herkesin kodunu bozar. Daha iyi yol alanları gizli tutup kurucu ve okuma metotları sunmaktır:
pub struct Kitap {
ad: String,
yazar: String,
yil: u16,
}
impl Kitap {
pub fn new(ad: &str, yazar: &str, yil: u16) -> Self { .. }
pub fn ad(&self) -> &str { &self.ad }
pub fn yil(&self) -> u16 { self.yil }
}
Artık kurucu, örneğin yılın geçerli olup olmadığını denetleyebilir ve iç gösterim serbestçe değişebilir.
pub(crate)
Görünürlük ince ayarlanabilir: pub(crate) öğeyi yalnızca aynı crate içinde açar, pub(super) yalnızca üst modüle. Kütüphanenin kendi modülleri arasında paylaşılan ama kullanıcıya gösterilmeyen yardımcılar için kullanılır:
pub(crate) fn normalize(s: &str) -> String {
s.trim().to_lowercase()
}
Gizli tutmak, API'yi küçük ve kararlı tutmanın en etkili yoludur: dışarı açtığın her şey, ileride bozmaman gereken bir sözdür.
Uygulama Kapsüllenmiş kitap
mod kitaplik içinde alanları gizli Kitap tanımla ve pub fn new, pub fn ad, pub fn yil metotlarını yaz. Kitap::new("Kürk Mantolu Madonna", "Sabahattin Ali", 1943) için ad ve yılı boşlukla yazdır.
Örnek çözümü göster
mod kitaplik {
pub struct Kitap {
ad: String,
yazar: String,
yil: u16,
}
impl Kitap {
pub fn new(ad: &str, yazar: &str, yil: u16) -> Self {
Self {
ad: ad.to_string(),
yazar: yazar.to_string(),
yil,
}
}
pub fn ad(&self) -> &str {
&self.ad
}
pub fn yil(&self) -> u16 {
self.yil
}
}
}
use kitaplik::Kitap;
fn main() {
let k = Kitap::new("Kürk Mantolu Madonna", "Sabahattin Ali", 1943);
println!("{} {}", k.ad(), k.yil());
}
Kendini test et
-
Alanlar gizliyken modül dışından <code>Kitap { ad: .., yazar: .., yil: .. }</code> yazılabilir mi?
- Yalnızca okuma için
- unsafe ile
- Hayır; gizli alanlı struct dışarıdan oluşturulamaz, kurucu gerekir
- Evet
Cevabı göster
Hayır; gizli alanlı struct dışarıdan oluşturulamaz, kurucu gerekir — Bu, değişmezleri (invariant) korumanın yoludur: geçersiz bir Kitap oluşturmanın tek yolu kurucudan geçmektir.
-
Okuma metodu
pub fn ad(&self) -> ____ {
&self.ad
}
Cevabı göster
pub fn ad(&self) -> &str {
&self.ad
}
-
Görünürlük ve kapsamı
- pub
- Her yerden
- pub(crate)
- Aynı crate
- pub(super)
- Üst modül
- (yok)
- Yalnızca modül içi
Sıradaki ders: Generic yapı