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);
}
This slide should take about 10 minutes.
  • Option sadece standart kütüphanede kullanılır gibi bir şey yoktur, yaygın olarak kullanılır.

  • unwrap, bir Option 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 genellikle None’ı 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 bellekte T ile aynı boyuta sahip olduğu anlamına gelir. Örneğin, bir referans NULL olamaz, bu nedenle Option<&T> None varyantını temsil etmek için otomatik olarak NULL kullanır ve bu sayede &T ile aynı bellekte saklanabilir.