Vec ile durum
- Rust kursu
- Orta seviye
- Ders 61/115
- 6 dk
Vec ile uygulama durumunu tutarsın.
Vec ile durum
Notları bellekte bir Vec<String> içinde tutan bir Defter türü yazalım. Kullanıcıya numaralar 1'den başlayarak gösterilir:
struct Defter {
notlar: Vec<String>,
}
impl Defter {
fn ekle(&mut self, metin: String) {
self.notlar.push(metin);
}
fn liste(&self) -> Vec<String> {
self.notlar.iter().enumerate()
.map(|(i, n)| format!("{}. {}", i + 1, n))
.collect()
}
}liste yazdırmak yerine satırları döndürür; böylece çıktı test edilebilir ve başka yerlerde de kullanılabilir.
Argümanları birleştirmek
not ekle süt al komutunda metin birden çok argümana bölünür; join(" ") ile tek metne birleştirilir:
let args = ["not", "ekle", "süt", "al"];
let metin = args[2..].join(" "); // "süt al"Dilim [2..], komut adından sonraki tüm argümanları verir.
Uygulama Not ekle ve listele
Defter'e liste metodunu ekle. ["not", "ekle", "süt", "al"] argümanlarından metni join ile oluşturup ekle, ardından "kod yaz" ekle; liste() satırlarını yazdır.
Başlangıç kodu
struct Defter {
notlar: Vec<String>,
}
impl Defter {
fn new() -> Self {
Self { notlar: Vec::new() }
}
fn ekle(&mut self, metin: String) {
self.notlar.push(metin);
}
}
fn main() {
// buraya yaz
}Örnek çözüm
struct Defter {
notlar: Vec<String>,
}
impl Defter {
fn new() -> Self {
Self { notlar: Vec::new() }
}
fn ekle(&mut self, metin: String) {
self.notlar.push(metin);
}
}
impl Defter {
fn liste(&self) -> Vec<String> {
self.notlar
.iter()
.enumerate()
.map(|(i, n)| format!("{}. {}", i + 1, n))
.collect()
}
}
fn main() {
let mut d = Defter::new();
let args = ["not", "ekle", "süt", "al"];
d.ekle(args[2..].join(" "));
d.ekle(String::from("kod yaz"));
for s in d.liste() {
println!("{}", s);
}
}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 Gerçek bir CLI'da notlar program kapanınca kaybolur. Bunu çözmenin yolu nedir?
- Vec yerine HashMap
- Çözülemez
- Durumu dosyaya kaydedip açılışta okumak Doğru cevap
- static değişken kullanmak
Açıklama: Dosya I/O ve serde derslerinde notları JSON olarak saklayacağız.
2 Numaralı satırlar
self.notlar.iter().____()
.map(|(i, n)| format!("{}. {}", i + 1, n))
self.notlar.iter().enumerate()
.map(|(i, n)| format!("{}. {}", i + 1, n))
Açıklama: enumerate her nota 0'dan başlayan sırasını ekler.
3 İfade ve sonuç
| Kavram | Anlamı |
|---|---|
args[2..].join(" ") |
"süt al" |
notlar.len() |
Not sayısı |
(0, "a") → format |
"1. a" |
Defter::new() |
Boş defter |