CodeBlanks Logo Icon CodeBlanks

Guard

if guard ile kalıp koşulu eklemeyi öğrenirsin.

Guard

Kalıbın ifade edemediği koşullar (iki bağlanan değişken arasındaki ilişki gibi) kolun sonuna if ile eklenir:

fn iliski(c: (i32, i32)) -> &'static str {
    match c {
        (a, b) if a == b => "eşit",
        (a, b) if a + b == 0 => "zıt",
        _ => "farklı",
    }
}

Guard'lar dış değişkenlere de erişebilir: Some(x) if x == hedef. Kalıp içinde dış bir değişken adı yazmak ise eşleşme değil yeni bir bağlama demektir; bu sık bir hatadır.

Guard ve kapsayıcılık

Derleyici guard koşullarını değerlendirmez; bu yüzden guard'lı kollar kapsayıcılık denetiminde sayılmaz ve sonda genellikle koşulsuz bir kol gerekir:

match n {
    x if x < 0 => "negatif",
    x if x >= 0 => "pozitif ya da sıfır",
    _ => unreachable!(),   // derleyici iki koşulun her şeyi kapsadığını bilmez
}

Böyle durumlarda kalıpları aralıkla yazmak daha iyidir: i32::MIN..=-1 ve 0...

Uygulama İlişki

Yukarıdaki iliski fonksiyonunu guard'larla yaz. (2, 2), (3, -3) ve (1, 5) için sonuçları boşlukla tek satırda yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
fn iliski(c: (i32, i32)) -> &'static str {
    match c {
        (a, b) if a == b => "eşit",
        (a, b) if a + b == 0 => "zıt",
        _ => "farklı",
    }
}

fn main() {
    println!("{} {} {}", iliski((2, 2)), iliski((3, -3)), iliski((1, 5)));
}

Beklenen çıktı

eşit zıt farklı

Soru ve cevaplar

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

1 <code>let hedef = 5; match v { Some(hedef) =&gt; .., _ =&gt; .. }</code> ne yapar?

  • Her Some değerini eşler ve yeni bir hedef değişkeni oluşturur (gölgeleme) Doğru cevap
  • Yalnızca Some(5) ile eşleşir
  • Derlenmez
  • Panic

Açıklama: Kalıptaki ad her zaman yeni bir bağlamadır; karşılaştırma için Some(x) if x == hedef yazılmalı.

2 Koşullu kol

Soru
match c {
    (a, b) ____ a == b => "eşit",
    _ => "farklı",
}
Cevap
match c {
    (a, b) if a == b => "eşit",
    _ => "farklı",
}

Açıklama: Guard kalıptan sonra if ile yazılır.

3 İkili ve sonuç

Kavram Anlamı
(2, 2) eşit
(3, -3) zıt
(1, 5) farklı
(0, 0) eşit (ilk kol)

İleri seviye bölümündeki tüm dersler