Hesaplama
- Rust kursu
- Başlangıç
- Ders 27/115
- 6 dk
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
fn main() {
// buraya yaz
}Örnek çözüm
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
match op {
"+" => Ok(a + b),
____ => Err("bilinmeyen".to_string()),
}
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 |