Option<T>
- Rust kursu
- Başlangıç
- Ders 80/115
- 4 dk
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
fn main() {
// buraya yaz
}Örnek çözüm
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<i32> = 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
fn bol(a: i32, b: i32) -> Option<i32> {
if b == 0 { ____ } else { Some(a / b) }
}
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) |