Pek çok programlama dili null değeri kullanmaya izin verir, bu da çalışma zamanında null pointer dereference hatalarına yol açar. Rust'ta, isteğe bağlı değerleri açık bir şekilde temsil etmek için evrensel bir Option<T> tipi getirilmiştir; bu tür güvenliği sağlar ve özellikle bir değerin yok olma durumunu dikkate almayı zorunlu kılar.
Bir değerin yokluğu (örneğin, arama sonuçları bulunamadığında) genellikle değerin türde yansıtılmadığı durumda çalışma zamanında hatalara yol açar. Güvenli ve açık bir boş değer yönetimi hata sayısını azaltır.
Option<T> tipi, iki seçenekten oluşan bir enum olarak uygulanmıştır: Some(T) (değer var) ve None (değer yok). Bu, derleyicinin programcıyı her iki durumu da dikkate almaya zorlamasını sağlar. İsteğe bağlı bir değerin açık bir kontrol olmadan kullanılması derleme hatasına neden olur.
Kod örneği:
fn divide(a: i32, b: i32) -> Option<i32> { if b == 0 { None } else { Some(a / b) } } let res = divide(6, 3); match res { Some(result) => println!("Sonuç: {}", result), None => println!("Sıfıra bölme!"), }
Ana özellikler:
Option<T> sıfır maliyetli bir soyutlama mıdır, yoksa her Option değişkeni daha fazla yer kaplar mı?
Evet, çoğu durumda Option<T>, T türünün "null" değere sahip olamayacağı (örneğin, referans türü veya Box<T>) durumlarda sıfır maliyetlidir. Rust, "nullable pointer optimization" optimizasyonunu kullanır ve ek hafıza gerekmez.
let value: Option<&u32> = None; // Normal bir referanstan daha fazla yer kaplamaz.
unwrap kullanmak güvenli midir?
Hayır, unwrap() None değerinde panik yapar. Değerin var olduğundan kesinlikle emin olunduğunda kullanılması gerekir; ya da unwrap_or, unwrap_or_else veya pattern matching yöntemlerini tercih etmelisiniz.
Option, referanslardan (&T, Option<&T>) nasıl farklıdır?
Referans her zaman mevcut bir değere işaret eder. Eğer değer yoksa, "belki yok" durumunu açıkça yansıtmak için Option<&T> kullanmalısınız. Option kullanmak doğrudan bir referans yerine, null işaretçi yarışmalarını önler.
Fonksiyon, Option ile bir arama sonucu döner, ancak çağıran kod, her zaman sonuç olduğunu düşünerek unwrap kullanır. Gerçekte, değer yoksa uygulama production ortamında çökebilir.
Artılar:
Eksiler:
Kod, Option'ın işlenmesi için match kullanıyor, tüm durumlar açıkça belgelenmiş ve testler ile kapsanmıştır.
Artılar:
Eksiler: