Özet - Kalıp eşleştirme
- Rust kursu
- Başlangıç
- Ders 88/115
- 5 dk
match, if let ve _ jokerini birleştirerek bir komut yorumlayıcı yazarsın.
Kalıp eşleştirme özeti
match kapsayıcıdır ve ilk uyan kolu çalıştırır. Kalıplar: sabitler, |, ..= aralıkları, tuple/struct/enum açma, @ bağlama, _ ve ... Tek kalıp için if let, döngü için while let, erken çıkış için let-else, bool için matches! kullanılır. Kollara koşul (guard) da eklenebilir: x if x < 0 => ...
Match guard
Kalıbın tek başına ifade edemediği koşullar için kola if eklenir:
fn sinif(n: i32) -> &'static str {
match n {
x if x < 0 => "negatif",
0 => "sıfır",
x if x % 2 == 0 => "çift",
_ => "tek",
}
}Guard, | ile birleşen kalıpların tamamına uygulanır: 1 | 2 if kosul → (1 ya da 2) ve koşul.
Uygulama Sayı sınıfı
Yukarıdaki fn sinif(n: i32) -> &'static str fonksiyonunu match guard'larla yaz. -3, 0, 4 ve 7 için sonuçları boşlukla ayırarak tek satırda yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn sinif(n: i32) -> &'static str {
match n {
x if x < 0 => "negatif",
0 => "sıfır",
x if x % 2 == 0 => "çift",
_ => "tek",
}
}
fn main() {
println!("{} {} {} {}", sinif(-3), sinif(0), sinif(4), sinif(7));
}Beklenen çıktı
negatif sıfır çift tek
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Koşullu kollar (guard) kullanılırken kapsayıcılık için ne gerekir?
- Genellikle koşulsuz bir son kol (_ gibi) Doğru cevap
- Hiçbir şey; derleyici koşulları çözer
- Her kolda guard
- else bloğu
Açıklama: Derleyici guard ifadelerini değerlendirmez; bu yüzden kalan durumları koşulsuz bir kol karşılamalıdır.
2 Koşul ekle
match n {
x ____ x < 0 => "negatif",
_ => "pozitif ya da sıfır",
}
match n {
x if x < 0 => "negatif",
_ => "pozitif ya da sıfır",
}
Açıklama: Match guard, kalıptan sonra if ile yazılır.
3 sinif() girdisi ve sonucu
| Kavram | Anlamı |
|---|---|
-3 |
negatif |
0 |
sıfır |
4 |
çift |
7 |
tek |