unwrap ve expect
- Rust kursu
- Başlangıç
- Ders 110/115
- 4 dk
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(); // Noneunwrap_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
fn main() {
// buraya yaz
}Örnek çözüm
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ç
let port: u16 = "8080".parse().____("port sabiti geçerli olmalı");
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 |