Menu
Coddy logo textTech

'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.

challenge icon

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 f64 türüne dönüştürün
  • İkinci girdiyi (bölen) okuyun ve boşlukları temizleyin
  • İkinci girdiyi f64 türüne dönüştürün
  • İki f64 parametresi alan ve Result<f64, &'static str> döndüren bir fonksiyon oluşturun
  • Fonksiyonun içinde, bölenin 0.0 olup olmadığını kontrol edin:
    • Eğer öyleyse, Err("Division by zero") döndürün
    • Değilse, Ok(dividend / divisor) döndürün
  • Fonksiyonu ayrıştırılmış iki sayı ile çağırın
  • Result değerini işlemek için bir match ifadesi kullanın
  • Ok(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
}
quiz iconKendini test et

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