Ekleme
- Rust kursu
- Başlangıç
- Ders 90/115
- 6 dk
Vec<Todo>'ya yeni görev ekleyen fonksiyon yazarsın.
Ekleme
Görevleri bir Liste struct'ında toplayalım. Yeni görevlere artan kimlik vermek için son kullanılan kimliği de saklıyoruz:
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
}
}ekle listeyi değiştirdiği için &mut self alır ve yeni görevin kimliğini döndürür.
Kurucu
Boş bir liste oluşturmayı kolaylaştırmak için bir new ilişkili fonksiyonu yazılabilir:
impl Liste {
fn new() -> Self {
Self { gorevler: Vec::new(), sonraki_id: 0 }
}
}
let mut liste = Liste::new();
let id = liste.ekle("Süt al"); // 1Liste değiştirileceği için değişken let mut ile tanımlanır.
Uygulama Görev ekle
Liste için fn new() -> Self ve fn ekle(&mut self, metin: &str) -> u32 yaz. "Süt al" ve "Kod yaz" görevlerini ekle; listedeki görev sayısını ve son eklenen kimliği boşlukla yazdı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 new() -> Self {
Self {
gorevler: Vec::new(),
sonraki_id: 0,
}
}
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 main() {
let mut liste = Liste::new();
liste.ekle("Süt al");
let son = liste.ekle("Kod yaz");
println!("{} {}", liste.gorevler.len(), son);
}Beklenen çıktı
2 2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>ekle</code> neden <code>metin: &str</code> alıp içeride <code>to_string()</code> yapıyor?
- to_string zorunludur
- Çağıran hem sabit metin hem String verebilsin; görev ise kendi kopyasına sahip olsun Doğru cevap
- &str daha hızlı yazdırılır
- String parametre alınamaz
Açıklama: Parametrede esnek &str, saklarken sahip olunan String: yaygın bir Rust deseni.
2 Vektöre ekle
self.gorevler.____(Gorev {
id: self.sonraki_id,
metin: metin.to_string(),
bitti: false,
});
self.gorevler.push(Gorev {
id: self.sonraki_id,
metin: metin.to_string(),
bitti: false,
});
Açıklama: Vec'in sonuna eleman eklemek için push kullanılır.
3 Parça ve görevi
| Kavram | Anlamı |
|---|---|
Vec<Gorev> |
Görevleri tutar |
sonraki_id |
Son kimlik |
&mut self |
Listeyi değiştirir |
Liste::new() |
Boş liste |