Null yerine Option
- Rust kursu
- Başlangıç
- Ders 81/115
- 4 dk
Null yerine Option kullanmanın avantajlarını öğrenirsin.
Null yerine Option
Başka dillerde "bulunamadı" çoğunlukla null, -1 ya da boş metinle gösterilir ve kontrol unutulunca hata çıkar. Rust'ta bulunamayabilecek her sonuç Option döndürür, kontrol de türün parçası olur:
let meyveler = ["armut", "elma", "kiraz"];
let i = meyveler.iter().position(|m| *m == "elma"); // Some(1)
let j = meyveler.iter().position(|m| *m == "muz"); // NoneVec::get, str::find, HashMap::get, iter().max() gibi pek çok yöntem bu yüzden Option döndürür.
Zincirleme yardımcılar
Option üzerinde match yazmadan çalışan yöntemler kodu kısaltır:
let sira = i.map(|n| n + 1); // Some(2): 1'den başlayan sıra
let varsay = j.unwrap_or(0); // 0
let var_mi = i.is_some(); // true
let metin = j.map_or("yok".to_string(), |n| n.to_string()); // "yok"map yalnızca Some içindeki değeri dönüştürür, None'ı olduğu gibi bırakır.
Uygulama Meyve sırası
fn bul(liste: &[&str], ad: &str) -> Option<usize> yaz (iter().position). ["armut", "elma", "kiraz"] için bul(.., "elma").map(|i| i + 1).unwrap_or(0) ve aynısını "muz" için hesaplayıp boşlukla yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn bul(liste: &[&str], ad: &str) -> Option<usize> {
liste.iter().position(|m| *m == ad)
}
fn main() {
let meyveler = ["armut", "elma", "kiraz"];
let a = bul(&meyveler, "elma").map(|i| i + 1).unwrap_or(0);
let b = bul(&meyveler, "muz").map(|i| i + 1).unwrap_or(0);
println!("{} {}", a, b);
}Beklenen çıktı
2 0
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>Vec::new::<i32>().iter().max()</code> ne döndürür?
- Some(0)
- None Doğru cevap
- 0
- Panic
Açıklama: Boş bir koleksiyonun en büyük elemanı yoktur; bu durum None ile dürüstçe ifade edilir.
2 Varsayılan değer
let j: Option<usize> = None;
let n = j.____(0); // 0
let j: Option<usize> = None;
let n = j.unwrap_or(0); // 0
Açıklama: unwrap_or, None durumunda verilen varsayılanı döndürür.
3 Yöntem ve None üzerinde sonucu
| Kavram | Anlamı |
|---|---|
is_some() |
false |
unwrap_or(7) |
7 |
map(|n| n + 1) |
None |
unwrap() |
Panic |