'Result' ile 'match' Kullanımı
Coddy'nin Rust Journey'sinin Logic & Flow bölümünün bir parçası — ders 43 / 66.
Artık bir Result'ın ne olduğunu anladığınıza göre, hem başarı hem de hata durumlarını ele almanın en açık ve güçlü yolunu öğrenelim: bir match ifadesi kullanmak.
Tıpkı Option ile olduğu gibi, match sizi bir Result'ın her iki varyantını da ele almaya zorlar. Başarıyı yönetmek için Ok için bir kol, hatayı yönetmek için ise Err için başka bir kol oluşturursunuz:
let result = divide(10, 2);
match result {
Ok(value) => println!("Division successful: {}", value),
Err(error) => println!("Division failed: {}", error),
}Result, Ok olduğunda, match başarılı değeri çıkarır ve ilk kolu yürütür. Err olduğunda ise hata bilgisini çıkarır ve ikinci kolu yürütür. Bu desen, olası bir hatayı asla yanlışlıkla görmezden gelmemenizi sağlar.
Görev
Kolayİki girdi alacaksınız. İlk girdi bir sayı (dize olarak) ve ikinci girdi başka bir sayıdır (dize olarak). İlk sayıyı ikinci sayıya bölmeye çalışan ve bir Result<f64, &'static str> döndüren bir fonksiyon oluşturun. Eğer ikinci sayı sıfır ise, "Division by zero" mesajıyla bir Err döndürün. Aksi takdirde, bölme sonucuyla birlikte Ok döndürün. Hem Ok hem de Err durumlarını ele almak ve uygun mesajı yazdırmak için bir match ifadesi kullanın.
Gereksinimler:
- İlk girdiyi (bölünen) okuyun ve boşlukları temizleyin
- İlk girdiyi
f64türüne dönüştürün - İkinci girdiyi (bölen) okuyun ve boşlukları temizleyin
- İkinci girdiyi
f64türüne dönüştürün - İki
f64parametresi alan veResult<f64, &'static str>döndüren bir fonksiyon oluşturun - Fonksiyonun içinde, bölenin
0.0olup olmadığını kontrol edin:- Eğer öyleyse,
Err("Division by zero")döndürün - Değilse,
Ok(dividend / divisor)döndürün
- Eğer öyleyse,
- Fonksiyonu ayrıştırılmış iki sayı ile çağırın
Resultdeğerini işlemek için birmatchifadesi kullanınOk(value)kolunda şunu yazdırın:Result: [value]Err(error)kolunda şunu yazdırın:Error: [error]
Girdi:
- İlk satır: Bölüneni temsil eden bir sayı (örneğin,
10.0) - İkinci satır: Böleni temsil eden bir sayı (örneğin,
2.0)
Çıktı:
- Bölme başarılıysa:
Result: [result] - Sıfıra bölme durumunda:
Error: Division by zero
Kopya kağıdı
Bir Result'ın hem Ok hem de Err varyantlarını işlemek için match kullanın:
let result = divide(10, 2);
match result {
Ok(value) => println!("Division successful: {}", value),
Err(error) => println!("Division failed: {}", error),
}match ifadesi sizi hem başarı hem de hata durumlarını ele almaya zorlar. Result, Ok olduğunda, başarılı değeri çıkarır ve ilk kolu çalıştırır. Err olduğunda ise hata bilgisini çıkarır ve ikinci kolu çalıştırır.
Kendin dene
use std::io;
// TODO: Result<f64, &'static str> döndüren bölme fonksiyonunuzu burada oluşturun
fn main() {
// İlk girdiyi oku (bölünen)
let mut dividend_input = String::new();
io::stdin().read_line(&mut dividend_input).expect("Failed to read line");
let dividend: f64 = dividend_input.trim().parse().expect("Invalid number");
// İkinci girdiyi oku (bölen)
let mut divisor_input = String::new();
io::stdin().read_line(&mut divisor_input).expect("Failed to read line");
let divisor: f64 = divisor_input.trim().parse().expect("Invalid number");
// TODO: Bölme fonksiyonunuzu çağırın ve Result'ı işlemek için match kullanın
// Ok durumu için "Result: [value]" yazdırın
// Err durumu için "Error: [error]" yazdırın
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Logic & Flow bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
'match' İfadesiBirden Çok Değeri EşleştirmeAralıkları Eşleştirme'if let' İfadesiİfade Olarak DöngülerÖzet - Basit Komut Ayrıştırıcı4Struct'lar ile Verileri Gruplama
Struct Nedir?Struct'lara Genel BakışStruct Alanlarına ErişmeMutable Struct'larFonksiyon Parametresi Olarak Struct'larTuple Struct'larÖzet - Bir Kitap Struct'ı Oluşturun7'Result' ile Hata Yönetimi
'Result' Nedir?'Result' ile 'match' Kullanımıis_ok() ve is_err()Kısayollar: unwrap ve expectSoru İşareti Operatörü '?'String'leri Sayılara DönüştürmeÖzet - Güvenli Bölme Fonksiyonu10Closures ve Anonim Fonksiyonlar
Closure Nedir?Basit Bir Closure TanımlamaParametreli Closure'larOrtamı YakalamakÖzet - Basit Toplayıcı Closure2Vektörlere Giriş
Vektör Nedir?Vektör Oluşturmapush ile Eleman EklemeVektör Elemanlarına ErişmeVektör Üzerinde YinelemeDeğiştirilebilir YinelemeEleman KaldırmaÖzet - Temel Skor Takipçisi5Hash Map'ler ile Anahtar-Değer Çiftleri
Hash Map Nedir?Bir Hash Map OluşturmaAnahtar-Değer Çiftleri EklemeDeğerlere ErişmeBir Hash Map Üzerinde GezinmeBir Değeri GüncellemeBir Çifti KaldırmaÖzet - Kelime Sayacı11Son Meydan Okumalar
Özet - Benzersiz ÖğelerÖzet - Kullanıcı Profili DoğrulayıcıÖzet - Not Özetleyici3Komut Satırı Yapılacaklar Listesi
Proje KurulumuGörev EklemeTüm Görevleri GörüntülemeGörev SilmeFinal Kodu6'Option' ile Yokluğu Yönetme
'Option' Nedir?'Option' ile 'match' Kullanımıis_some() ve is_none()Bir 'Option' Değerini Açmak (Unwrapping)expect MetoduVarsayılan Değer Sağlama: unwrap_orÖzet - Bir Eleman Bulma9String Dilimleri ve Daha Fazlası
String ve &strString Dilimleri OluşturmaFonksiyon Parametresi Olarak DilimlerDiğer DilimlerÖzet - İlk Kelimeyi Bulma