CodeBlanks Logo Icon CodeBlanks

Listeleme

for döngüsüyle görevleri ekrana yazdırırsın.

Listeleme

Görevleri yazdırmak yalnızca okuma gerektirir, bu yüzden &self yeterli. Vektörü &self.gorevler ile ödünç alarak dolaşırız:

fn listele(&self) {
    for g in &self.gorevler {
        let isaret = if g.bitti { "x" } else { " " };
        println!("[{}] {}: {}", isaret, g.id, g.metin);
    }
}

for g in self.gorevler yazsaydık vektörü taşımaya çalışırdık; &self arkasındaki bir alan taşınamayacağı için derleme hatası alırdık.

Boş liste mesajı

Boş liste için açıklayıcı bir mesaj iyi bir kullanıcı deneyimidir:

fn listele(&self) {
    if self.gorevler.is_empty() {
        println!("Görev yok.");
        return;
    }
    for g in &self.gorevler {
        // ...
    }
}

Erken return, ana mantığı girintisiz tutar.

Uygulama Görevleri listele

Liste'ye ekle ve listele metotlarını yaz. "Süt al" ve "Kod yaz" ekleyip listele() çağır.

Başlangıç kodu

main.rs
struct Gorev {
    id: u32,
    metin: String,
    bitti: bool,
}

struct Liste {
    gorevler: Vec<Gorev>,
    sonraki_id: u32,
}

fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
struct Gorev {
    id: u32,
    metin: String,
    bitti: bool,
}

struct Liste {
    gorevler: Vec<Gorev>,
    sonraki_id: u32,
}

impl Liste {
    fn ekle(&mut self, metin: &str) -> u32 {
        self.sonraki_id += 1;
        self.gorevler.push(Gorev {
            id: self.sonraki_id,
            metin: metin.to_string(),
            bitti: false,
        });
        self.sonraki_id
    }
    fn listele(&self) {
        for g in &self.gorevler {
            let isaret = if g.bitti { "x" } else { " " };
            println!("[{}] {}: {}", isaret, g.id, g.metin);
        }
    }
}

fn main() {
    let mut liste = Liste {
        gorevler: Vec::new(),
        sonraki_id: 0,
    };
    liste.ekle("Süt al");
    liste.ekle("Kod yaz");
    liste.listele();
}

Beklenen çıktı

[ ] 1: Süt al
[ ] 2: Kod yaz

Soru ve cevaplar

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

1 Liste boşsa <code>listele</code> ne yazar?

  • Hiçbir şey; döngü hiç çalışmaz Doğru cevap
  • Panic verir
  • "[]" yazar
  • None yazar

Açıklama: Boş bir vektör üzerinde for döngüsü sıfır kez döner. Kullanıcı dostu olmak için is_empty ile ayrı bir mesaj gösterilebilir.

2 Ödünç alarak dolaş

Soru
for g in ____self.gorevler {
    println!("{}", g.metin);
}
Cevap
for g in &self.gorevler {
    println!("{}", g.metin);
}

Açıklama: &self.gorevler vektörü taşımadan dolaşır.

3 Döngü ve sonucu

Kavram Anlamı
for g in &v Ödünç alır
for g in &mut v Değiştirerek dolaşır
for g in v Taşır
v.is_empty() Boş mu?

Başlangıç bölümündeki tüm dersler

16 Proje: Yapılacaklar listesi

  1. Görev modeli
  2. Ekleme
  3. Listeleme
  4. İşaretleme
  5. Komut okuma