Menu
Coddy logo textTech

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.

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

Çıktı:

  • Eğer ikinci girdi valid ise: Value: [number]
  • Eğer ikinci girdi invalid ise: 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: 42

Uyarı: 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]
    
}
quiz iconKendini test et

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