CodeBlanks Logo Icon CodeBlanks

unwrap ve expect

unwrap ve expect kısayollarını ve risklerini öğrenirsin.

unwrap ve expect

unwrap() Ok/Some içindeki değeri verir, aksi halde panic verir. expect("mesaj") aynı işi yapar ama panic mesajını sen belirlersin; neden başarısız olmaması gerektiğini anlatan bir mesaj hata ayıklamayı kolaylaştırır:

let port: u16 = "8080".parse().expect("port sabiti geçerli olmalı");
// let x: i32 = "x".parse().unwrap();
// panic: called `Result::unwrap()` on an `Err` value: ParseIntError { kind: InvalidDigit }

Prototiplerde, testlerde ve gerçekten imkânsız durumlarda kabul edilebilirler; üretim kodunda kullanıcı girdisine uygulanmamalıdır.

Panic vermeyen seçenekler

Varsayılan değerle devam etmenin yolları:

let a: i32 = "x".parse().unwrap_or(0);              // 0
let b: i32 = "".parse().unwrap_or_default();        // 0 (i32 varsayılanı)
let c: i32 = "x".parse().unwrap_or_else(|_| -1);    // -1
let d: Option<i32> = "x".parse().ok();              // None

unwrap_or_else varsayılanı yalnızca gerektiğinde hesaplar; pahalı bir varsayılan için tercih edilir.

Uygulama Varsayılanlar

Üç dönüşüm yap: "12" için expect("sayı olmalı"), "x" için unwrap_or(0), "" için unwrap_or_default() (hepsi i32). Sonuçları boşlukla ayırarak yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn main() {
    let a: i32 = "12".parse().expect("sayı olmalı");
    let b: i32 = "x".parse().unwrap_or(0);
    let c: i32 = "".parse().unwrap_or_default();
    println!("{} {} {}", a, b, c);
}

Beklenen çıktı

12 0 0

Soru ve cevaplar

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

1 Kullanıcı girdisini sayıya çevirirken hangisi en uygundur?

  • match ya da unwrap_or ile hatayı ele almak Doğru cevap
  • unwrap()
  • expect("hata")
  • panic!

Açıklama: Kullanıcı girdisi beklenen bir hata kaynağıdır; programı çökertmek yerine kullanıcıya bilgi verilmelidir.

2 Açıklamalı aç

Soru
let port: u16 = "8080".parse().____("port sabiti geçerli olmalı");
Cevap
let port: u16 = "8080".parse().expect("port sabiti geçerli olmalı");

Açıklama: expect panic durumunda verilen mesajı gösterir.

3 Yöntem ve "x" üzerinde sonucu (i32)

Kavram Anlamı
unwrap() Panic
unwrap_or(0) 0
unwrap_or_else(|_| -1) -1
ok() None

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