Public API
- Rust kursu
- Orta seviye
- Ders 26/115
- 6 dk
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
fn main() {
// buraya yaz
}Örnek çözüm
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
pub fn ad(&self) -> ____ {
&self.ad
}
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 |