Bir 'Option' Değerini Açmak (Unwrapping)
Coddy'nin Rust Journey'sinin Logic & Flow 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 mi yoksa geçersiz mi sayılması gerektiğini belirtir. Eğer ikinci girdi valid ise, ayrıştırılmış sayıyı içeren bir Some ile Option<i32> oluşturun. Eğer ikinci girdi invalid ise, None içeren bir Option<i32> oluşturun. Option içindeki değeri çıkarmak için .unwrap() kullanın ve bunu yazdırın.
Gereksinimler:
- İlk girdiyi okuyun ve boşlukları temizleyin (trim)
- İkinci girdiyi okuyun ve boşlukları temizleyin (trim)
- İlk girdiyi
.parse::<i32>()kullanaraki32türüne ayrıştırın - Bir
Option<i32>değişkeni oluşturun:- Eğer ikinci girdi
validise,Some(parsed_number)atayın - Eğer ikinci girdi
invalidise,Noneatayın
- Eğer ikinci girdi
Optioniçindeki değeri çıkarmak için.unwrap()kullanın- Çıkarılan değeri şu formatta yazdırın:
Value: [number]
Girdi:
- İlk satır: Dize olarak bir sayı (örneğin,
42) - İkinci satır:
validveyainvalid
Çıktı:
- Eğer ikinci girdi
validise:Value: [number] - Eğer ikinci girdi
invalidise: Program panikleyecektir (bu, bu görev için beklenen bir davranıştır)
Not: İkinci girdi invalid olduğunda, None üzerinde .unwrap() çağırmak paniğe neden olur. Bu, Option'ın bir değer içerdiğinden emin olmadığınızda .unwrap() kullanmanın tehlikeli doğasını gösterir.
Kopya kağıdı
.unwrap() metodu, bir Option<T> içerisinden değeri çıkarır:
let maybe_number = Some(42);
let actual_number = maybe_number.unwrap();
println!("The number is: {}", actual_number); // Yazdırır: The number is: 42Uyarı: None üzerinde .unwrap() çağırmak, programınızın paniklemesine (panic) ve çökmesine neden olur:
let empty_option: Option<i32> = None;
let value = empty_option.unwrap(); // Bu panikleyecektir!.unwrap() metodunu yalnızca Option'ın bir Some değeri içerdiğinden kesinlikle emin olduğunuzda kullanın.
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.
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