CodeBlanks Logo Icon CodeBlanks

Özet - Kontrol akışı

if, match ve döngüleri birleştirerek bir sayı tahmin oyunu yazarsın.

Kontrol akışı özeti

Karar: if/else if/else (koşul bool, ifade olarak değer üretir) ve match (kapsamlı, aralık ve | kalıpları). Döngü: loop (koşulsuz, break değer), while (koşullu), for (iteratör, ../..=, enumerate, rev). Akış: break, continue, etiketler ('dis).

for n in 1..=15 {
    let s = match (n % 3, n % 5) {
        (0, 0) => "FizzBuzz".to_string(),
        (0, _) => "Fizz".to_string(),
        (_, 0) => "Buzz".to_string(),
        _ => n.to_string(),
    };
    print!("{s} ");
}

Tuple ile match

Birden çok değeri aynı anda eşleştirmek için onları bir tuple içinde match'lemek okunur bir yoldur. _ o konumdaki değeri yok sayar:

match (gun_tatil, hava_guzel) {
    (true, true) => "pikniğe git",
    (true, false) => "film izle",
    (false, _) => "işe git",
}

Uygulama FizzBuzz

1'den 15'e kadar sayılar için tuple ile match (n % 3, n % 5) kullanarak FizzBuzz yazdır; değerleri tek satırda boşlukla ayırarak (print!) yazdır ve sonda println!() çağır.

Başlangıç kodu

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

Örnek çözüm

main.rs
fn main() {
    for n in 1..=15 {
        let s = match (n % 3, n % 5) {
            (0, 0) => "FizzBuzz".to_string(),
            (0, _) => "Fizz".to_string(),
            (_, 0) => "Buzz".to_string(),
            _ => n.to_string(),
        };
        print!("{s} ");
    }
    println!();
}

Beklenen çıktı

1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 FizzBuzz örneğinde <code>(0, 0)</code> kolu neden ilk sıradadır?

  • match ilk eşleşen kolu çalıştırır; (0, _) önce olsaydı 15 "Fizz" olurdu Doğru cevap
  • Alfabetik sıra
  • Rust zorunlu tutar
  • Sıra önemsizdir

Açıklama: Kollar yukarıdan aşağı denenir; en özel kalıp en üste yazılır.

2 Ters aralık

Soru
for i in (1..=5).____() {
    print!("{i} ");  // 5 4 3 2 1
}
Cevap
for i in (1..=5).rev() {
    print!("{i} ");  // 5 4 3 2 1
}

Açıklama: rev() iteratörü sondan başa gezer.

3 Grubun özeti

Kavram Anlamı
if İki yollu karar
match Kapsamlı karar
loop / while Koşulsuz / koşullu döngü
for Iteratör döngüsü

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