match ve Result
- Rust kursu
- Başlangıç
- Ders 109/115
- 4 dk
match ile Result'ın her iki dalını da yönetirsin.
match ve Result
Hatayı yerinde ele almak için match kullanılır. Kollara guard eklenerek başarılı değerler de ayrıca sınıflandırılabilir:
match "8".parse::<i32>() {
Ok(n) if n >= 0 => println!("kare: {}", n * n),
Ok(n) => println!("negatif: {n}"),
Err(e) => println!("hata: {e}"),
}Err(e) kolunda e'yi {} ile yazdırmak kullanıcıya uygun mesajı (Display), {:?} ise geliştiriciye yönelik ayrıntıyı (Debug) verir.
Result yardımcıları
Option'da olduğu gibi Result'ta da match yazmadan çalışan yöntemler vardır:
let r: Result<i32, String> = Ok(3);
r.is_ok() // true
r.ok() // Some(3): Result → Option
r.map(|n| n + 1) // Ok(4)
r.and_then(|n| if n > 5 { Ok(n) } else { Err("küçük".into()) }) // Err("küçük")and_then, başarı değerini başarısız olabilecek bir sonraki adıma zincirler.
Uygulama Girdileri sınıflandır
["8", "-3", "abc"] girdilerini dolaş ve parse::<i32>() sonucunu match ile işle: negatif olmayan sayı için kare: N, negatif için negatif: N, hata için hata: MESAJ yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn main() {
for g in ["8", "-3", "abc"] {
match g.parse::<i32>() {
Ok(n) if n >= 0 => println!("kare: {}", n * n),
Ok(n) => println!("negatif: {}", n),
Err(e) => println!("hata: {}", e),
}
}
}Beklenen çıktı
kare: 64 negatif: -3 hata: invalid digit found in string
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>"".parse::<i32>()</code> hatası <code>{}</code> ile yazdırılınca ne görünür?
- None
- cannot parse integer from empty string Doğru cevap
- invalid digit found in string
- ParseIntError { kind: Empty }
Açıklama: Display mesajı insan okuması içindir; Debug biçimi ParseIntError { kind: Empty } olurdu.
2 Hata kolu
match "x".parse::<i32>() {
Ok(n) => println!("{n}"),
____(e) => println!("hata: {e}"),
}
match "x".parse::<i32>() {
Ok(n) => println!("{n}"),
Err(e) => println!("hata: {e}"),
}
Açıklama: Result'ın hata variant'ı Err'dir.
3 Yöntem ve Ok(3) üzerinde sonucu
| Kavram | Anlamı |
|---|---|
is_ok() |
true |
ok() |
Some(3) |
map(|n| n + 1) |
Ok(4) |
is_err() |
false |