Option
Daha önce Option<T>
’nin bazı kullanımlarını görmüştük. Ya T
türünde bir değer saklar ya da hiçbir şey saklamaz. Örneğin, String::find
bir Option<usize>
geri döndürür.
fn main() { let name = "Löwe 老虎 Léopard Gepardi"; let mut position: Option<usize> = name.find('é'); dbg!(position); assert_eq!(position.unwrap(), 14); position = name.find('Z'); dbg!(position); assert_eq!(position.expect("Karakter bulunamadı"), 0); }
-
Option
sadece standart kütüphanede kullanılır gibi bir şey yoktur, yaygın olarak kullanılır. -
unwrap
, birOption
içindeki değeri geri döndürür veya paniğe (panic) neden olur.expect
benzerdir ancak bir hata mesajı (error message) alır.- None durumunda panik alabilirsiniz, ancak None’ı kontrol etmeyi “yanlışlıkla” unutamazsınız.
- Bir şeyler üzerinde çalışırken her yerde
unwrap
/expect
kullanmak yaygındır, ancak üretim (production) kodu genellikleNone
’ı daha şık bir şekilde ele alır.
-
“Niş/oyuk optimizasyonu (niche optimization)”, T’nin geçerli bir değeri olmayan bir gösterimi (representation) varsa,
Option<T>
’nin genellikle bellekteT
ile aynı boyuta sahip olduğu anlamına gelir. Örneğin, bir referans NULL olamaz, bu nedenleOption<&T>
None
varyantını temsil etmek için otomatik olarak NULL kullanır ve bu sayede&T
ile aynı bellekte saklanabilir.