CodeBlanks Logo Icon CodeBlanks

Hesaplama

trim, parse ve aritmetik işlemlerle sonucu hesaplarsın.

Hesaplama

Parçalar metin olduğu için sayılara parse ile çevrilir; işlem simgesi ise match ile seçilir:

fn hesapla(a: f64, op: &str, b: f64) -> Result<f64, String> {
    match op {
        "+" => Ok(a + b),
        "-" => Ok(a - b),
        "*" => Ok(a * b),
        "/" => Ok(a / b),
        _ => Err(format!("bilinmeyen işlem: {op}")),
    }
}

_ kolu diğer tüm durumları yakalar; Rust match'in tüm olasılıkları kapsamasını zorunlu tutar.

Sayıya çevirme

"12".parse::<f64>() bir Result<f64, ParseFloatError> döndürür. Hata mesajını kendi biçimimize çevirmek için map_err kullanılır:

let a: f64 = "12".parse().map_err(|_| "geçersiz sayı".to_string())?;

? operatörü hata varsa onu hemen çağırana döndürür; yoksa içteki değeri verir. Bu sayede iç içe match yazmak gerekmez.

Uygulama Hesaplayıcı

Yukarıdaki hesapla fonksiyonunu dört işlem ve _ koluyla yaz. hesapla(12.0, "*", 3.0) ve hesapla(2.0, "^", 3.0) sonuçlarını {:?} ile ayrı satırlarda yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
fn hesapla(a: f64, op: &str, b: f64) -> Result<f64, String> {
    match op {
        "+" => Ok(a + b),
        "-" => Ok(a - b),
        "*" => Ok(a * b),
        "/" => Ok(a / b),
        _ => Err(format!("bilinmeyen işlem: {op}")),
    }
}

fn main() {
    println!("{:?}", hesapla(12.0, "*", 3.0));
    println!("{:?}", hesapla(2.0, "^", 3.0));
}

Beklenen çıktı

Ok(36.0)
Err("bilinmeyen işlem: ^")

Soru ve cevaplar

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

1 <code>match</code> ifadesinden <code>_</code> kolunu silersen ne olur?

  • Bilinmeyen işlemde program sessizce devam eder
  • Çalışma anında panic
  • Hiçbir şey olmaz
  • Derleme hatası: tüm olasılıklar kapsanmıyor Doğru cevap

Açıklama: Rust match'in kapsamlı (exhaustive) olmasını derleme anında denetler; &str için sonsuz olasılık olduğundan _ gerekir.

2 Varsayılan kol

Soru
match op {
    "+" => Ok(a + b),
    ____ => Err("bilinmeyen".to_string()),
}
Cevap
match op {
    "+" => Ok(a + b),
    _ => Err("bilinmeyen".to_string()),
}

Açıklama: _ kolu eşleşmeyen tüm değerleri yakalar.

3 Girdi ve sonuç

Kavram Anlamı
(12, "*", 3) Ok(36)
(7, "/", 2) Ok(3.5)
(2, "^", 3) Err(bilinmeyen işlem)
"x".parse::<f64>() Err

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