CodeBlanks Logo Icon CodeBlanks

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.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
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());
}

Beklenen çıktı

Kürk Mantolu Madonna 1943

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 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 Doğru cevap
  • Evet

Açıklama: Bu, değişmezleri (invariant) korumanın yoludur: geçersiz bir Kitap oluşturmanın tek yolu kurucudan geçmektir.

2 Okuma metodu

Soru
pub fn ad(&self) -> ____ {
    &self.ad
}
Cevap
pub fn ad(&self) -> &str {
    &self.ad
}

Açıklama: Getter alanı kopyalamadan &str olarak verir.

3 Görünürlük ve kapsamı

Kavram Anlamı
pub Her yerden
pub(crate) Aynı crate
pub(super) Üst modül
(yok) Yalnızca modül içi

Orta seviye bölümündeki tüm dersler