CodeBlanks Logo Icon CodeBlanks

match ve Result

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

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

Örnek çözüm

main.rs
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::&lt;i32&gt;()</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

Soru
match "x".parse::<i32>() {
    Ok(n) => println!("{n}"),
    ____(e) => println!("hata: {e}"),
}
Cevap
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

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