CodeBlanks Logo Icon CodeBlanks

Option<T>

Option<T> türü ve Some/None variantlarını öğrenirsin.

Option<T>

Rust'ta null yoktur. "Değer olabilir de olmayabilir de" durumu standart kütüphanedeki bir enum ile ifade edilir:

enum Option<T> {
    Some(T),
    None,
}

Option, Some ve None önceden kapsama alınmıştır (prelude); Option:: yazmadan kullanılır:

fn bol(a: i32, b: i32) -> Option<i32> {
    if b == 0 { None } else { Some(a / b) }
}

Option'ı açmak

İçteki değere ulaşmanın yolları:

let r = bol(10, 2);
match r {
    Some(n) => println!("sonuç {n}"),
    None => println!("sıfıra bölme"),
}
let n = bol(1, 0).unwrap_or(0);        // None ise 0
let k = bol(9, 3).map(|v| v * 10);     // Some(30)

unwrap() None'da panic verir; yalnızca değerin kesinlikle var olduğu yerlerde kullan.

Uygulama Güvenli bölme

fn bol(a: i32, b: i32) -> Option<i32> yaz: b == 0 ise None, değilse Some(a / b). bol(10, 2) ve bol(1, 0) sonuçlarını {:?} ile boşlukla ayırarak yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn bol(a: i32, b: i32) -> Option<i32> {
    if b == 0 {
        None
    } else {
        Some(a / b)
    }
}

fn main() {
    println!("{:?} {:?}", bol(10, 2), bol(1, 0));
}

Beklenen çıktı

Some(5) None

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>let x: Option&lt;i32&gt; = Some(5); let y = x + 1;</code> neden derlenmez?

  • Some yanlış yazılmış
  • Derlenir, 6 olur
  • Option<i32> bir i32 değildir; önce içi açılmalı Doğru cevap
  • 5 çok küçük

Açıklama: Derleyici seni None durumunu düşünmeye zorlar; bu, null hatalarını derleme anında yok eder.

2 Değer yok

Soru
fn bol(a: i32, b: i32) -> Option<i32> {
    if b == 0 { ____ } else { Some(a / b) }
}
Cevap
fn bol(a: i32, b: i32) -> Option<i32> {
    if b == 0 { None } else { Some(a / b) }
}

Açıklama: Değer yoksa None döndürülür; Rust'ta null yoktur.

3 İfade ve sonuç

Kavram Anlamı
bol(10, 2) Some(5)
bol(1, 0) None
bol(1, 0).unwrap_or(0) 0
bol(9, 3).map(|v| v * 10) Some(30)

Başlangıç bölümündeki tüm dersler

16 Proje: Yapılacaklar listesi

  1. Görev modeli
  2. Ekleme
  3. Listeleme
  4. İşaretleme
  5. Komut okuma