CodeBlanks Logo Icon CodeBlanks

Sayı karşılaştırma

parse ile tahmini sayıya çevirip Ordering ile karşılaştırırsın.

Sayıya çevirme

Metni sayıya çevirmek için parse kullanılır; hedef tür belirtilmelidir. Sonuç bir Result'tır çünkü "abc" gibi metinler çevrilemez:

let tahmin: u32 = tahmin.trim().parse().expect("Bir sayı yaz!");

Burada eski tahmin (String) aynı adla yeni bir u32 ile gölgelenir (shadowing); ayrı bir ad uydurmaya gerek kalmaz.

cmp ve Ordering

a.cmp(&b), std::cmp::Ordering türünden üç değerden birini döndürür: Less, Greater, Equal. match üçünü de ele almayı zorunlu kılar:

use std::cmp::Ordering;

match tahmin.cmp(&gizli) {
    Ordering::Less => println!("Çok küçük"),
    Ordering::Greater => println!("Çok büyük"),
    Ordering::Equal => println!("Bildin!"),
}

Bir kolu unutursan derleyici "non-exhaustive patterns" hatası verir.

Uygulama İlk karşılaştırma

let gizli: u32 = 42; ve "30" metnini parse::<u32>() ile çevirip (unwrap) cmp ile karşılaştır. Less için 30: Çok küçük, Greater için Çok büyük, Equal için Bildin! yazdır.

Başlangıç kodu

main.rs
use std::cmp::Ordering;

fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
use std::cmp::Ordering;

fn main() {
    let gizli: u32 = 42;
    let tahmin: u32 = "30".parse().unwrap();
    match tahmin.cmp(&gizli) {
        Ordering::Less => println!("{}: Çok küçük", tahmin),
        Ordering::Greater => println!("{}: Çok büyük", tahmin),
        Ordering::Equal => println!("{}: Bildin!", tahmin),
    }
}

Beklenen çıktı

30: Çok küçük

Soru ve cevaplar

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

1 <code>"-5".parse::&lt;u32&gt;()</code> ne döndürür?

  • Err(...) Doğru cevap
  • Ok(5)
  • Ok(-5)
  • Panic

Açıklama: u32 işaretsizdir; eksi işareti geçersiz bir rakamdır ve Err döner.

2 Karşılaştır

Soru
match tahmin.____(&gizli) {
    Ordering::Less => println!("Çok küçük"),
    Ordering::Greater => println!("Çok büyük"),
    Ordering::Equal => println!("Bildin!"),
}
Cevap
match tahmin.cmp(&gizli) {
    Ordering::Less => println!("Çok küçük"),
    Ordering::Greater => println!("Çok büyük"),
    Ordering::Equal => println!("Bildin!"),
}

Açıklama: cmp bir Ordering değeri döndürür.

3 cmp sonucu

Kavram Anlamı
3.cmp(&5) Less
5.cmp(&3) Greater
5.cmp(&5) Equal
"x".parse::<u32>() 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