CodeBlanks Logo Icon CodeBlanks

while let

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ü biter

Aynı 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 1

Uygulama 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

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
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

Soru
while let Some(ust) = yigin.____() {
    println!("{ust}");
}
Cevap
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

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