Varsayılan Değer Sağlama: unwrap_or
Coddy'nin Rust Journey'sinin Logic & Flow bölümünün bir parçası — ders 40 / 66.
.unwrap() ve .expect() bir Option içerisinden değerleri çıkarabilse de, her ikisinin de büyük bir kusuru vardır: bir None ile karşılaştıklarında paniklerler. Daha güvenli kod için Rust, asla paniklemeyen bir yöntem olan .unwrap_or() sunar.
.unwrap_or() metodu, argüman olarak varsayılan bir değer alır. Eğer Option bir Some içeriyorsa, içindeki değeri döndürür. Eğer bir None ise, sağladığınız varsayılan değeri döndürür:
let maybe_score = Some(85);
let score = maybe_score.unwrap_or(0);
println!("Score: {}", score); // Şunu yazdırır: Score: 85
let no_score: Option = None;
let default_score = no_score.unwrap_or(0);
println!("Score: {}", default_score); // Şunu yazdırır: Score: 0Bu yaklaşım, .unwrap() yönteminden çok daha güvenlidir çünkü programınız asla çökmeyecektir - her zaman kullanılabilir bir değer geri alırsınız.
Görev
Kolayİki girdi alacaksınız. İlk girdi bir puan (sayı olarak), ikinci girdi ise puanın mevcut (yes) veya eksik (no) olduğunu belirtir. Kullanılabilirlik durumuna göre bir Option<i32> oluşturun. 50 varsayılan değeriyle puanı güvenli bir şekilde çıkarmak için .unwrap_or() kullanın, ardından nihai puanı yazdırın.
Gereksinimler:
- İlk girdiyi (puan) okuyun ve boşlukları temizleyin
- İlk girdiyi
i32türüne dönüştürün - İkinci girdiyi (kullanılabilirlik durumu) okuyun ve boşlukları temizleyin
- Bir
Option<i32>değişkeni oluşturun:- Eğer kullanılabilirlik durumu
yesise,Some(score)atayın - Eğer kullanılabilirlik durumu
noise,Noneatayın
- Eğer kullanılabilirlik durumu
50varsayılan değeriyle puanı çıkarmak için.unwrap_or(50)kullanın- Nihai puanı şu formatta yazdırın:
Final score: [score]
Girdi:
- İlk satır: Puanı temsil eden bir sayı (örneğin,
85) - İkinci satır:
yesveyano
Çıktı:
- Eğer kullanılabilirlik durumu
yesise:Final score: [score](gerçek puan) - Eğer kullanılabilirlik durumu
noise:Final score: 50(varsayılan değer)
Kopya kağıdı
.unwrap_or() metodu, bir Option içerisinden değerleri paniklemeye (panic) neden olmadan çıkarmanın güvenli bir yolunu sunar. Argüman olarak varsayılan bir değer alır ve eğer Some ise içindeki değeri, None ise varsayılan değeri döndürür:
let maybe_score = Some(85);
let score = maybe_score.unwrap_or(0);
// score 85'tir
let no_score: Option<i32> = None;
let default_score = no_score.unwrap_or(0);
// default_score 0'dırBu metot .unwrap() veya .expect() metotlarından daha güvenlidir çünkü asla bir paniğe (panic) neden olmaz - her zaman kullanılabilir bir değer alırsınız.
Kendin dene
use std::io;
fn main() {
// Skoru oku
let mut score_input = String::new();
io::stdin().read_line(&mut score_input).expect("Failed to read line");
let score: i32 = score_input.trim().parse().expect("Invalid number");
// Uygunluk durumunu oku
let mut availability = String::new();
io::stdin().read_line(&mut availability).expect("Failed to read line");
let availability = availability.trim();
// TODO: Kodunuzu aşağıya yazın
// Uygunluk durumuna göre bir Option<i32> oluşturun
// Nihai skoru elde etmek için .unwrap_or(50) kullanın
// Sonucu yazdır
println!("Final score: {}", final_score);
}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
1İleri Seviye Kontrol Akışı
'match' İfadesiBirden Çok Değeri EşleştirmeAralıkları Eşleştirme'if let' İfadesiİfade Olarak DöngülerÖzet - Basit Komut Ayrıştırıcı4Struct'lar ile Verileri Gruplama
Struct Nedir?Struct'lara Genel BakışStruct Alanlarına ErişmeMutable Struct'larFonksiyon Parametresi Olarak Struct'larTuple Struct'larÖzet - Bir Kitap Struct'ı Oluşturun7'Result' ile Hata Yönetimi
'Result' Nedir?'Result' ile 'match' Kullanımıis_ok() ve is_err()Kısayollar: unwrap ve expectSoru İşareti Operatörü '?'String'leri Sayılara DönüştürmeÖzet - Güvenli Bölme Fonksiyonu10Closures ve Anonim Fonksiyonlar
Closure Nedir?Basit Bir Closure TanımlamaParametreli Closure'larOrtamı YakalamakÖzet - Basit Toplayıcı Closure2Vektörlere Giriş
Vektör Nedir?Vektör Oluşturmapush ile Eleman EklemeVektör Elemanlarına ErişmeVektör Üzerinde YinelemeDeğiştirilebilir YinelemeEleman KaldırmaÖzet - Temel Skor Takipçisi5Hash Map'ler ile Anahtar-Değer Çiftleri
Hash Map Nedir?Bir Hash Map OluşturmaAnahtar-Değer Çiftleri EklemeDeğerlere ErişmeBir Hash Map Üzerinde GezinmeBir Değeri GüncellemeBir Çifti KaldırmaÖzet - Kelime Sayacı11Son Meydan Okumalar
Özet - Benzersiz ÖğelerÖzet - Kullanıcı Profili DoğrulayıcıÖzet - Not Özetleyici3Komut Satırı Yapılacaklar Listesi
Proje KurulumuGörev EklemeTüm Görevleri GörüntülemeGörev SilmeFinal Kodu6'Option' ile Yokluğu Yönetme
'Option' Nedir?'Option' ile 'match' Kullanımıis_some() ve is_none()Bir 'Option' Değerini Açmak (Unwrapping)expect MetoduVarsayılan Değer Sağlama: unwrap_orÖzet - Bir Eleman Bulma9String Dilimleri ve Daha Fazlası
String ve &strString Dilimleri OluşturmaFonksiyon Parametresi Olarak DilimlerDiğer DilimlerÖzet - İlk Kelimeyi Bulma