Rust
Döngü ve bitiş
loop ve break ile doğru tahminde oyunu bitirirsin.
Döngü ve bitiş
Oyunu tekrarlatmak için loop kullanılır; doğru tahminde break ile çıkılır. Geçersiz girdide programı çökertmek yerine match ile continue yapılır:
loop {
let mut tahmin = String::new();
io::stdin().read_line(&mut tahmin).expect("okunamadı");
let tahmin: u32 = match tahmin.trim().parse() {
Ok(n) => n,
Err(_) => continue,
};
match tahmin.cmp(&gizli) {
Ordering::Less => println!("Çok küçük"),
Ordering::Greater => println!("Çok büyük"),
Ordering::Equal => { println!("Bildin!"); break; }
}
}
Deneme sayacı
Oyunu zenginleştirmek için geçerli tahminleri sayabiliriz. Sayaç döngünün dışında let mut ile tanımlanır; böylece turlar arasında değeri korunur:
let mut deneme = 0;
loop {
// ... geçerli tahmin okundu
deneme += 1;
if tahmin == gizli {
println!("{deneme} denemede bildin!");
break;
}
}
break bir değerle de kullanılabilir: let sonuc = loop { break deneme; };
Uygulama Oyunu oynat
gizli = 28 ve tahmin listesi ["50", "abc", "25", "28"] ile oyunu çalıştır. loop içinde it.next() ile sıradaki tahmini al (bitince break). Geçersizse abc: Geçersiz yazıp continue; geçerliyse sayacı artır ve Büyük/Küçük yaz; eşitse 28: Bildin! (3 deneme) yazıp break.
Örnek çözümü göster
use std::cmp::Ordering;
fn main() {
let gizli: u32 = 28;
let tahminler = ["50", "abc", "25", "28"];
let mut it = tahminler.iter();
let mut deneme = 0;
loop {
let g = match it.next() {
Some(g) => g,
None => break,
};
let t: u32 = match g.parse() {
Ok(n) => n,
Err(_) => {
println!("{}: Geçersiz", g);
continue;
}
};
deneme += 1;
match t.cmp(&gizli) {
Ordering::Less => println!("{}: Küçük", t),
Ordering::Greater => println!("{}: Büyük", t),
Ordering::Equal => {
println!("{}: Bildin! ({} deneme)", t, deneme);
break;
}
}
}
}
Kendini test et
-
Oyuncu <code>abc</code> girerse yukarıdaki döngü ne yapar?
- Döngüden çıkar
- 0 kabul eder
- Err koluna girer ve yeni tahmin ister
- Panic verir
Cevabı göster
Err koluna girer ve yeni tahmin ister — continue döngünün başına döner; program çökmez.
-
Geçersizi atla
let tahmin: u32 = match g.parse() {
Ok(n) => n,
Err(_) => ____,
};
Cevabı göster
let tahmin: u32 = match g.parse() {
Ok(n) => n,
Err(_) => continue,
};
-
Anahtar kelime ve etkisi
- loop
- Sonsuz döngü
- break
- Döngüden çık
- continue
- Sonraki tura geç
- Err(_) =>
- Hatayı yakala
Sıradaki ders: Struct tanımı