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); }
-
Optionsadece standart kütüphanede kullanılır gibi bir şey yoktur, yaygın olarak kullanılır. -
unwrap, birOptioniçindeki değeri geri döndürür veya paniğe (panic) neden olur.expectbenzerdir 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/expectkullanmak 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 bellekteTile aynı boyuta sahip olduğu anlamına gelir. Örneğin, bir referans NULL olamaz, bu nedenleOption<&T>Nonevaryantını temsil etmek için otomatik olarak NULL kullanır ve bu sayede&Tile aynı bellekte saklanabilir.