CodeBlanks Logo Icon CodeBlanks

Struct kalıpları

Struct alanlarını kalıp ile ayıklamayı öğrenirsin.

Struct kalıpları

Kalıplar struct alanlarını hem açabilir hem de belirli değerlerle eşleştirebilir. Sabit değerli alanlar süzgeç, adlandırılan alanlar bağlama görevi görür; .. kalanları yok sayar:

struct Nokta { x: i32, y: i32 }

fn konum(p: &Nokta) -> String {
    match p {
        Nokta { x: 0, y } => format!("y ekseninde {y}"),
        Nokta { x, y: 0 } => format!("x ekseninde {x}"),
        Nokta { x, y } => format!("düzlemde ({x}, {y})"),
    }
}

Alan adı ile değişken adı aynıysa kısaltma kullanılır; farklı ad için Nokta { x: yatay, .. } yazılır.

Referans üzerinden eşleme

match p ifadesinde p bir &Nokta'dır ama kalıplar Nokta { .. } diye yazılmıştır. "Match ergonomics" sayesinde derleyici kalıbı otomatik olarak referansa uyarlar ve bağlanan x, y değişkenleri &i32 olur. Sabitlerle karşılaştırma (x: 0) yine çalışır.

let noktalar = [Nokta { x: 0, y: 3 }, Nokta { x: 2, y: 0 }];
for p in &noktalar {
    println!("{}", konum(p));
}

Uygulama Konum sınıflandır

Yukarıdaki Nokta ve konum fonksiyonunu yaz. (0, 3), (2, 0) ve (1, 1) noktaları için sonuçları ayrı satırlara yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
struct Nokta {
    x: i32,
    y: i32,
}

fn konum(p: &Nokta) -> String {
    match p {
        Nokta { x: 0, y } => format!("y ekseninde {y}"),
        Nokta { x, y: 0 } => format!("x ekseninde {x}"),
        Nokta { x, y } => format!("düzlemde ({x}, {y})"),
    }
}

fn main() {
    let noktalar = [Nokta { x: 0, y: 3 }, Nokta { x: 2, y: 0 }, Nokta { x: 1, y: 1 }];
    for p in &noktalar {
        println!("{}", konum(p));
    }
}

Beklenen çıktı

y ekseninde 3
x ekseninde 2
düzlemde (1, 1)

Soru ve cevaplar

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

1 <code>Nokta { x: 0, y: 0 }</code> yukarıdaki match'te hangi kola girer?

  • İkinci kol
  • Üçüncü kol
  • Hiçbiri
  • İlk kol: "y ekseninde 0" Doğru cevap

Açıklama: Kollar sırayla denenir; x: 0 ilk kolu sağladığı için orada durur. Orijin için ayrı bir kol isteniyorsa en üste yazılmalı.

2 Sabitle eşle, kalanı bağla

Soru
match p {
    Nokta { x: ____, y } => format!("y ekseninde {y}"),
    _ => String::new(),
}
Cevap
match p {
    Nokta { x: 0, y } => format!("y ekseninde {y}"),
    _ => String::new(),
}

Açıklama: x: 0 yalnızca x sıfırsa eşleşir; y değeri bağlanır.

3 Nokta ve sonuç

Kavram Anlamı
Nokta { x: 0, y: 3 } y ekseninde 3
Nokta { x: 2, y: 0 } x ekseninde 2
Nokta { x: 1, y: 1 } düzlemde (1, 1)
Nokta { x: 0, y: 0 } y ekseninde 0

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