CodeBlanks Logo Icon CodeBlanks

Değer bağlama

Kalıp değişkenleriyle eşleşen değeri bağlamayı öğrenirsin.

Değer bağlama

Kalıplar değerleri parçalayıp (destructure) değişkenlere bağlayabilir. Tuple, struct ve enum'lar aynı şekilde açılır:

let nokta = (3, 0);
match nokta {
    (0, 0) => println!("merkez"),
    (x, 0) => println!("x ekseni {x}"),
    (0, y) => println!("y ekseni {y}"),
    (x, y) => println!("{x},{y}"),
}

Sabit kısımlar eşleşmeyi daraltır, değişken kısımlar değeri yakalar.

Struct açma ve @

Struct alanları adlarıyla açılır; .. kalan alanları yok sayar. ad @ kalıp ise hem kalıbı denetler hem değeri bağlar:

struct Oyuncu { ad: String, puan: u32 }

let o = Oyuncu { ad: String::from("Ece"), puan: 87 };
match o {
    Oyuncu { puan: p @ 80..=100, .. } => println!("usta: {p}"),
    Oyuncu { ad, .. } => println!("{ad} çalışmalı"),
}

Uygulama Nokta sınıflandır

[(0, 0), (3, 0), (0, 5), (2, 2)] dizisini dolaş ve her noktayı match ile sınıflandır: merkez, x ekseni N, y ekseni N ya da x,y. Her sonucu ayrı satıra yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
fn main() {
    let noktalar = [(0, 0), (3, 0), (0, 5), (2, 2)];
    for n in noktalar {
        match n {
            (0, 0) => println!("merkez"),
            (x, 0) => println!("x ekseni {}", x),
            (0, y) => println!("y ekseni {}", y),
            (x, y) => println!("{},{}", x, y),
        }
    }
}

Beklenen çıktı

merkez
x ekseni 3
y ekseni 5
2,2

Soru ve cevaplar

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

1 <code>match (0, 7) { (x, 0) =&gt; .., (0, y) =&gt; .., _ =&gt; .. }</code> hangi kola girer?

  • (0, y) ve y = 7 Doğru cevap
  • (x, 0) ve x = 0
  • _
  • Hiçbiri

Açıklama: İkinci eleman 0 olmadığı için ilk kol uymaz; ilk eleman 0 olduğu için ikinci kol uyar.

2 Aralığı bağla

Soru
match yas {
    n ____ 0..=17 => println!("{n}: çocuk"),
    n => println!("{n}: yetişkin"),
}
Cevap
match yas {
    n @ 0..=17 => println!("{n}: çocuk"),
    n => println!("{n}: yetişkin"),
}

Açıklama: @ hem aralığı denetler hem eşleşen değeri n'ye bağlar.

3 Kalıp ve anlamı

Kavram Anlamı
(x, 0) İkinci eleman 0, x bağlanır
Oyuncu { ad, .. } Yalnızca ad alanı
p @ 80..=100 Aralık + bağlama
(_, y) İlki yok sayılır

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