Bir 'Option' Değerini Açmak (Unwrapping)
Coddy'nin Rust Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 38 / 66.
Bazen bir Option'ın bir Some içerdiğinden emin olduğunuzda, içindeki gerçek değeri çıkarmanız gerekir. Rust bu amaç için .unwrap() metodunu sağlar; bu metod, değeri bir Some içerisinden çıkarır ve size doğrudan verir.
let maybe_number = Some(42);
let actual_number = maybe_number.unwrap();
println!("The number is: {}", actual_number);Bir Some(value) üzerinde .unwrap() metodunu çağırdığınızda, içindeki değeri döndürür. Yukarıdaki örnekte, actual_number değeri 42 olur - artık bir Option içinde sarmalanmış değildir.
Ancak, kritik bir uyarı var: bir None üzerinde .unwrap() çağırırsanız, programınız panikleyecek ve hemen çökecektir. Bu, .unwrap() metodunu, yalnızca Option'ın bir Some içerdiğinden kesinlikle emin olduğunuzda kullanılması gereken potansiyel olarak tehlikeli bir metod yapar.
let empty_option: Option<i32> = None;
let value = empty_option.unwrap(); // Bu panik hatasına yol açacaktır!.unwrap() metodunu idareli bir şekilde ve yalnızca Option'ın bir değer içerdiğini garanti edebildiğiniz durumlarda kullanın; örneğin basit örneklerde veya .is_some() ile zaten kontrol ettiğinizde.
Görev
Kolayİki girdi alacaksınız. İlk girdi bir sayıdır (dize olarak) ve ikinci girdi, bu sayının geçerli veya geçersiz olarak değerlendirilmesi gerektiğini belirtir. İkinci girdi valid ise, ayrıştırılmış sayıyı içeren Some değerine sahip bir Option<i32> oluşturun. İkinci girdi invalid ise, None içeren bir Option<i32> oluşturun. Option içindeki değeri çıkarmak ve yazdırmak için .unwrap() kullanın.
Gereksinimler:
- İlk girdiyi okuyun ve boşlukları kırpın
- İkinci girdiyi okuyun ve boşlukları kırpın
.parse::<i32>()kullanarak ilk girdiyii32türüne ayrıştırın- Bir
Option<i32>değişkeni oluşturun:- İkinci girdi
validiseSome(parsed_number)atayın - İkinci girdi
invalidiseNoneatayın
- İkinci girdi
Optioniçindeki değeri çıkarmak için.unwrap()kullanın- Çıkarılan değeri şu biçimde yazdırın:
Value: [number]
Girdi:
- İlk satır: Dize olarak bir sayı (ör.
42) - İkinci satır:
validveyainvalid
Çıktı:
- İkinci girdi
validise:Value: [number] - İkinci girdi
invalidise: Program panic yapar (bu alıştırma için beklenen davranıştır)
Not: İkinci girdi invalid olduğunda, None üzerinde .unwrap() çağrısı panic oluşmasına neden olur. Bu, Option değer içerdiğinden emin olmadığınızda .unwrap() kullanmanın tehlikeli yapısını gösterir.
Kendin dene
use std::io;
fn main() {
// İlk girişi oku (dize olarak 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();
// İkinci girişi oku (geçerli veya geçersiz)
let mut validity_input = String::new();
io::stdin().read_line(&mut validity_input).expect("Failed to read line");
let validity_input = validity_input.trim();
// Sayıyı ayrıştır
let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
// YAPILACAK: Kodunuzu aşağıya yazın
// validity_input'a dayalı bir Option<i32> oluşturun
// Eğer validity_input "valid" ise, Some(parsed_number) atayın
// Eğer validity_input "invalid" ise, None atayın
// Ardından değeri çıkarmak için .unwrap() kullanın ve şu formatta yazdırın: Value: [number]
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış 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 BulmaKendi başına pratik yap: Online Rust derleyicisi