while let
- Rust kursu
- Başlangıç
- Ders 86/115
- 4 dk
while let ile kalıp eşleştikçe dönen döngü kurarsın.
while let
while let, kalıp uyduğu sürece döngüyü sürdürür. Yığından (stack) eleman çekmek klasik örnektir:
let mut yigin = vec![1, 2, 3];
while let Some(ust) = yigin.pop() {
println!("{ust}");
}
// 3, 2, 1 — pop None döndürünce döngü biterAynı kod loop + match + break ile de yazılabilir; while let bunun kısa biçimidir.
Ne zaman while let?
Döngü sırasında koleksiyonu değiştiriyorsan (ör. elemanları çekip yenilerini eklemek) for kullanamazsın, çünkü for koleksiyonu ödünç alır. while let her turda yeniden pop çağırdığı için buna izin verir:
let mut kuyruk = vec![3];
while let Some(n) = kuyruk.pop() {
print!("{n} ");
if n > 1 { kuyruk.push(n - 1); }
}
// 3 2 1Uygulama Yığından topla
let mut yigin = vec![1, 2, 3]; tanımla. while let Some(x) = yigin.pop() ile her elemanın 10 katını yeni bir vektöre ekle ve sonucu {:?} ile yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn main() {
let mut yigin = vec![1, 2, 3];
let mut sonuc = Vec::new();
while let Some(x) = yigin.pop() {
sonuc.push(x * 10);
}
println!("{:?}", sonuc);
}Beklenen çıktı
[30, 20, 10]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>while let Some(x) = it.next()</code> ile hangisi aynı işi yapar?
- loop { it.next(); }
- match it { .. }
- for x in it Doğru cevap
- if let Some(x) = it.next()
Açıklama: for döngüsü arka planda next() çağırıp None gelene kadar sürer.
2 Yığını boşalt
while let Some(ust) = yigin.____() {
println!("{ust}");
}
while let Some(ust) = yigin.pop() {
println!("{ust}");
}
Açıklama: pop son elemanı Some içinde verir; boşsa None döner ve döngü biter.
3 Döngü ve bitiş koşulu
| Kavram | Anlamı |
|---|---|
while let Some(x) = v.pop() |
v boşalınca |
for x in &v |
Elemanlar bitince |
loop |
break ile |
while n > 0 |
Koşul false olunca |