Struct kalıpları
- Rust kursu
- İleri seviye
- Ders 72/81
- 4 dk
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
fn main() {
// buraya yaz
}Örnek çözüm
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
match p {
Nokta { x: ____, y } => format!("y ekseninde {y}"),
_ => String::new(),
}
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 |