Ana içeriğe geç
Modül 2 · Ders 2 ders 2Kurstaki 4/14~15 min
Modül dersleri (2/2)

Desen Eşleştirme, Seçenek ve Sonuç

Rust, örüntü eşleştirme adı verilen son derece güçlü bir akış kontrol mekanizmasına sahiptir. Bir değeri bir dizi kalıpla karşılaştırmanıza ve hangi kalıbın eşleştiğine göre kod yürütmenize olanak tanır.

match Beyanı

Rust'taki match ifadesi diğer dillerdeki switch ifadesine benzer ancak çok daha güçlü ve güvenlidir. Derleyici eşleşmenin kapsamlı olmasını sağlar, yani tüm olası durumların ele alınması gerekir:

Rust
enum Direction {
    North,
    South,
    East,
    West,
}

let dir = Direction::East;

match dir {
    Direction::North => println!("Andiamo a Nord"),
    Direction::South => println!("Andiamo a Sud"),
    Direction::East => println!("Andiamo a Est"),
    Direction::West => println!("Andiamo a Ovest"),
}

Değer Eksikliğini Ele Alma: Option

Rust'ta boş değer kavramı yoktur (null veya nil). Bunun yerine, standart kitaplık Option<T> adlı ve şunları içerebilen bir numaralandırmayı tanımlar:

  • Some(T): T türünde bir değer içerir.
  • None: değerin olmadığını gösterir.
Rust
let x: Option<i32> = Some(5);
let y: Option<i32> = None;

match x {
    Some(val) => println!("C'e un valore: {}", val),
    None => println!("Nessun valore trovato"),
}

Kurtarılabilir Hataları Ele Alma: Result

Başarısız olabilecek işlemler için (bir dosyayı okumak veya bir dizeyi bir sayıya ayrıştırmak gibi) Rust, iki değişkeni olan Result<T, E> numaralandırmasını kullanır:

  • Ok(T): işlem başarılı oldu ve T başarı değerini içeriyor.
  • Err(E): işlem başarısız oldu ve E hatasını içeriyor.
Rust
fn divide(numerator: f64, denominator: f64) -> Result<f64, String> {
    if denominator == 0.0 {
        Err(String::from("Divisione per zero!"))
    } else {
        Ok(numerator / denominator)
    }
}

Rust'un derleyicisi sayesinde, Ok içindeki değere erişmeden önce Err durumunu ele almak zorunda kalırsınız, bu da birçok yaygın çalışma zamanı hatasını önler.

Joker Karakter Deseni _

Çok sayıda değişkene (tamsayılar gibi) sahip veri türleriyle çalışırken, tüm durumları match içinde listelemek imkansızdır. Rust, açıkça tanımlanmayan kalan tüm durumları yakalamak için _ joker karakterinin kullanılmasına izin verir:

Rust
let some_u8 = 3u8;
match some_u8 {
    1 => println!("One"),
    2 => println!("Two"),
    _ => println!("Something else"), // Handles all other values
}

Kendin dene

Egzersiz#rust.m2.l2.e1
Denemeler: 0Yükleniyor…

Some(42)'yi içeren, Option<i32> tipinde Maybe_value adında bir değişken bildirin. Maybe_value'da bir match ifadesi kullanın: Some(v) içeriyorsa print 'value is: v' (println kullanarak!), Yok içeriyorsa print 'no value'.

Düzenleyici yükleniyor…
İpucu göster

Bir `match might_value { Some(v) => println!('value is: {}', v), Yok => println!('no value') }` bloğu yazın.

3 denemeden sonra çözüm mevcut

Egzersiz#rust.m2.l2.e2
Denemeler: 0Yükleniyor…

Check_age işlevini tamamlayın; böylece yaş 18'den büyük veya 18'e eşitse Ok('Yetişkin'), aksi takdirde Err('Minor') değerini döndürür.

Düzenleyici yükleniyor…
İpucu göster

'Ok('Yetişkin')` veya`Err('Küçük')` ifadesinin döndürülüp döndürülmeyeceğine karar vermek için `if age >= 18` seçeneğini kullanın.

3 denemeden sonra çözüm mevcut

Egzersiz#rust.m2.l2.e3
Denemeler: 0Yükleniyor…

Active ve Inactive değişkenlerini içeren Status adlı bir numaralandırma bildirin. Ana olarak, Status::Active değerine sahip bir current_status değişkeni bildirin. Son olarak, durum Etkin ise 'etkin' veya Etkin Değil ise 'etkin değil' yazdırmak için current_status'ta bir eşleşme ifadesi kullanın.

Düzenleyici yükleniyor…
İpucu göster

Enum'u main'den önce 'enum Status { Active, Inactive }' ile tanımlayın. Temel olarak, 'let current_status = Status::Active;' kullanın ve varyantlar üzerinde 'eşleştirme' gerçekleştirin.

3 denemeden sonra çözüm mevcut