Menu
Coddy logo textTech

Varsayılan Değer Sağlama: unwrap_or

Coddy'nin Rust Journey'sinin Logic & Flow bölümünün bir parçası — ders 40 / 66.

.unwrap() ve .expect() bir Option içerisinden değerleri çıkarabilse de, her ikisinin de büyük bir kusuru vardır: bir None ile karşılaştıklarında paniklerler. Daha güvenli kod için Rust, asla paniklemeyen bir yöntem olan .unwrap_or() sunar.

.unwrap_or() metodu, argüman olarak varsayılan bir değer alır. Eğer Option bir Some içeriyorsa, içindeki değeri döndürür. Eğer bir None ise, sağladığınız varsayılan değeri döndürür:

let maybe_score = Some(85);
let score = maybe_score.unwrap_or(0);
println!("Score: {}", score); // Şunu yazdırır: Score: 85

let no_score: Option = None;
let default_score = no_score.unwrap_or(0);
println!("Score: {}", default_score); // Şunu yazdırır: Score: 0

Bu yaklaşım, .unwrap() yönteminden çok daha güvenlidir çünkü programınız asla çökmeyecektir - her zaman kullanılabilir bir değer geri alırsınız.

challenge icon

Görev

Kolay

İki girdi alacaksınız. İlk girdi bir puan (sayı olarak), ikinci girdi ise puanın mevcut (yes) veya eksik (no) olduğunu belirtir. Kullanılabilirlik durumuna göre bir Option<i32> oluşturun. 50 varsayılan değeriyle puanı güvenli bir şekilde çıkarmak için .unwrap_or() kullanın, ardından nihai puanı yazdırın.

Gereksinimler:

  • İlk girdiyi (puan) okuyun ve boşlukları temizleyin
  • İlk girdiyi i32 türüne dönüştürün
  • İkinci girdiyi (kullanılabilirlik durumu) okuyun ve boşlukları temizleyin
  • Bir Option<i32> değişkeni oluşturun:
    • Eğer kullanılabilirlik durumu yes ise, Some(score) atayın
    • Eğer kullanılabilirlik durumu no ise, None atayın
  • 50 varsayılan değeriyle puanı çıkarmak için .unwrap_or(50) kullanın
  • Nihai puanı şu formatta yazdırın: Final score: [score]

Girdi:

  • İlk satır: Puanı temsil eden bir sayı (örneğin, 85)
  • İkinci satır: yes veya no

Çıktı:

  • Eğer kullanılabilirlik durumu yes ise: Final score: [score] (gerçek puan)
  • Eğer kullanılabilirlik durumu no ise: Final score: 50 (varsayılan değer)

Kopya kağıdı

.unwrap_or() metodu, bir Option içerisinden değerleri paniklemeye (panic) neden olmadan çıkarmanın güvenli bir yolunu sunar. Argüman olarak varsayılan bir değer alır ve eğer Some ise içindeki değeri, None ise varsayılan değeri döndürür:

let maybe_score = Some(85);
let score = maybe_score.unwrap_or(0);
// score 85'tir

let no_score: Option<i32> = None;
let default_score = no_score.unwrap_or(0);
// default_score 0'dır

Bu metot .unwrap() veya .expect() metotlarından daha güvenlidir çünkü asla bir paniğe (panic) neden olmaz - her zaman kullanılabilir bir değer alırsınız.

Kendin dene

use std::io;

fn main() {
    // Skoru oku
    let mut score_input = String::new();
    io::stdin().read_line(&mut score_input).expect("Failed to read line");
    let score: i32 = score_input.trim().parse().expect("Invalid number");
    
    // Uygunluk durumunu oku
    let mut availability = String::new();
    io::stdin().read_line(&mut availability).expect("Failed to read line");
    let availability = availability.trim();
    
    // TODO: Kodunuzu aşağıya yazın
    // Uygunluk durumuna göre bir Option<i32> oluşturun
    // Nihai skoru elde etmek için .unwrap_or(50) kullanın
    
    
    // Sonucu yazdır
    println!("Final score: {}", final_score);
}
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