Menu
Coddy logo textTech

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.

challenge icon

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 girdiyi i32 türüne ayrıştırın
  • Bir Option<i32> değişkeni oluşturun:
    • İkinci girdi valid ise Some(parsed_number) atayın
    • İkinci girdi invalid ise None atayın
  • Option iç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: valid veya invalid

Çıktı:

  • İkinci girdi valid ise: Value: [number]
  • İkinci girdi invalid ise: 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]
    
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online Rust derleyicisi