Kısayollar: unwrap ve expect
Coddy'nin Rust Journey'sinin Logic & Flow bölümünün bir parçası — ders 45 / 66.
Daha önce Option ile .unwrap() ve .expect() metotlarını öğrenmiştiniz ve bu aynı metotlar Result ile de çalışır. Ancak, başarı ve hata durumlarıyla ilgilenirken davranışları biraz farklıdır.
.unwrap() metodu, bir Ok varyantından değeri çıkarır, ancak Result bir Err ise programınız panikleyecek ve çökecektir. Benzer şekilde, .expect() de aynı şeyi yapar ancak hata ayıklamayı kolaylaştıran özel bir panik mesajı sağlamanıza olanak tanır:
let success: Result = Ok(42);
let value = success.expect("This should work!");
println!("Value: {}", value); // Şunu yazdırır: Value: 42
// Bu, özel mesajla panikleyecektir:
// let failure: Result = Err("Something went wrong");
// let value = failure.expect("This should work!"); // Panikler!Bu yöntemler başarılı değerlere hızlı erişim sağlasa da, dikkatli kullanılmalıdırlar. İşlemin başarılı olacağından kesinlikle emin olduğunuzda veya geliştirme ve test aşamalarında en uygundurlar.
Görev
Kolayİki girdi alacaksınız. İlk girdi bir sayı (dize olarak) ve ikinci girdi bir durum göstergesidir (ok veya error). Duruma göre bir Result<i32, &'static str> oluşturun. Eğer durum ok ise, ayrıştırılmış sayıyı içeren bir Ok oluşturun. Eğer durum error ise, "Invalid operation" mesajını içeren bir Err oluşturun. Result içinden değeri çıkarmak için özel bir mesajla .expect() kullanın ve sonucu yazdırın.
Gereksinimler:
- İlk girdiyi (sayı) okuyun ve boşlukları temizleyin
- İlk girdiyi
i32türüne ayrıştırın - İkinci girdiyi (durum) okuyun ve boşlukları temizleyin
- Bir
Result<i32, &'static str>değişkeni oluşturun:- Eğer durum
okise,Ok(parsed_number)atayın - Eğer durum
errorise,Err("Invalid operation")atayın
- Eğer durum
Resultiçinden değeri çıkarmak için.expect("Failed to get value")kullanın- Çıkarılan değeri şu formatta yazdırın:
Value: [value]
Girdi:
- İlk satır: Bir sayı (örneğin,
75) - İkinci satır:
okveyaerror
Çıktı:
- Eğer durum
okise:Value: [number] - Eğer durum
errorise: Program özel mesajla panikleyecektir (bu görevde test edilmemiştir)
Not: Bu görev için, test senaryoları başarılı yürütmeyi sağlamak adına yalnızca ok durumunu kullanacaktır. error durumu, bir Err ile karşılaşıldığında .expect() metodunun beklenen davranışı olan bir paniğe (panic) neden olur.
Kopya kağıdı
.unwrap() ve .expect() metotları, Ok varyantından değerleri çıkarmak için Result türleriyle birlikte çalışır.
.unwrap(), bir Ok içerisinden değeri çıkarır, ancak Result bir Err ise panikler:
let success: Result<i32, &str> = Ok(42);
let value = success.unwrap();
println!("Value: {}", value); // Şunu yazdırır: Value: 42.expect() aynı şekilde çalışır ancak daha kolay hata ayıklama için özel bir panik mesajı sağlamanıza olanak tanır:
let success: Result<i32, &str> = Ok(42);
let value = success.expect("This should work!");
println!("Value: {}", value); // Şunu yazdırır: Value: 42
// Bu, özel mesajla panikleyecektir:
let failure: Result<i32, &str> = Err("Something went wrong");
let value = failure.expect("This should work!"); // Özel mesajla paniklerBu metotlar dikkatli kullanılmalıdır, çünkü Result bir Err ise programınızı çökertecektir. İşlemin başarılı olacağından emin olduğunuzda veya geliştirme ve test aşamalarında en uygundurlar.
Kendin dene
use std::io;
fn main() {
// İlk girişi oku (sayı)
let mut number_input = String::new();
io::stdin().read_line(&mut number_input).expect("Failed to read line");
let number_input = number_input.trim();
// Sayıyı i32'ye dönüştür
let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
// İkinci girişi oku (durum)
let mut status = String::new();
io::stdin().read_line(&mut status).expect("Failed to read line");
let status = status.trim();
// TODO: Kodunuzu aşağıya yazın
// Duruma göre bir Result<i32, &'static str> oluşturun
// Değeri çıkarmak için .expect() kullanın
// Sonucu şu formatta yazdırın: Value: [value]
}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