CodeBlanks Logo Icon CodeBlanks

pub

pub ile görünürlük kontrolü yapmayı öğrenirsin.

pub

Görünürlük öğe öğe belirlenir. Struct için pub yalnızca türü açar; her alan ayrıca işaretlenmelidir. Enum'da ise pub tüm variant'ları açar:

mod banka {
    pub struct Hesap {
        pub sahip: String,   // dışarıdan okunur/yazılır
        bakiye: i64,         // gizli
    }

    pub enum Tur { Vadesiz, Vadeli }   // iki variant da açık
}

Gizli alanı olan bir struct dışarıdan Hesap { .. } ile oluşturulamaz; bir kurucu (pub fn new) sunulmalıdır.

Getter ve kurucu

Gizli alanlara kontrollü erişim metotlarla verilir:

impl Hesap {
    pub fn new(sahip: &str) -> Self {
        Self { sahip: sahip.to_string(), bakiye: 0 }
    }
    pub fn bakiye(&self) -> i64 {
        self.bakiye
    }
    pub fn yatir(&mut self, n: i64) {
        if n > 0 {
            self.bakiye += n;
        }
    }
}

Modül içindeki kod, aynı modüldeki gizli alanlara her zaman erişebilir.

Uygulama Banka modülü

mod banka içinde pub sahip ve gizli bakiye alanlı Hesap yaz; new, bakiye ve yatir metotlarını ekle. main'de "Ece" için hesap açıp 50 yatır; h.sahip ve h.bakiye() değerlerini boşlukla yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
mod banka {
    pub struct Hesap {
        pub sahip: String,
        bakiye: i64,
    }

    impl Hesap {
        pub fn new(sahip: &str) -> Self {
            Self {
                sahip: sahip.to_string(),
                bakiye: 0,
            }
        }
        pub fn bakiye(&self) -> i64 {
            self.bakiye
        }
        pub fn yatir(&mut self, n: i64) {
            if n > 0 {
                self.bakiye += n;
            }
        }
    }
}

use banka::Hesap;

fn main() {
    let mut h = Hesap::new("Ece");
    h.yatir(50);
    println!("{} {}", h.sahip, h.bakiye());
}

Beklenen çıktı

Ece 50

Soru ve cevaplar

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

1 Bakiyeyi gizli tutmanın yararı nedir?

  • Bakiye yalnızca kurallara uyan metotlarla (yatir, cek) değişebilir Doğru cevap
  • Daha hızlı çalışır
  • Bellek tasarrufu
  • Derleyici zorunlu tutar

Açıklama: Kapsülleme değişmezleri korur: örneğin bakiye hiçbir zaman eksiye düşmesin.

2 Açık alan

Soru
pub struct Hesap {
    ____ sahip: String,
    bakiye: i64,
}
Cevap
pub struct Hesap {
    pub sahip: String,
    bakiye: i64,
}

Açıklama: Struct alanları ayrı ayrı pub ile açılır.

3 Öğe ve dışarıdan erişim

Kavram Anlamı
pub sahip Okunur ve yazılır
bakiye (pub yok) Erişilemez
pub enum Tur Tüm variant'lar açık
pub fn bakiye(&self) Salt okunur erişim

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