Listeleme
- Rust kursu
- Başlangıç
- Ders 91/115
- 6 dk
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
struct Gorev {
id: u32,
metin: String,
bitti: bool,
}
struct Liste {
gorevler: Vec<Gorev>,
sonraki_id: u32,
}
fn main() {
// buraya yaz
}Örnek çözüm
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ş
for g in ____self.gorevler {
println!("{}", g.metin);
}
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? |