F # - Seçenekler
optionF # türünde bir değişken veya işlev için bir değer olabileceği veya bulunmayabileceği hesaplamalarda kullanılır. Hesaplamalarda isteğe bağlı değerleri temsil etmek için seçenek türleri kullanılır. Olası iki değere sahip olabilirler -Some(x) veya None.
Örneğin, bir bölme gerçekleştiren bir işlev normal durumda bir değer döndürür, ancak sıfır payda olması durumunda istisnalar atar. Buradaki seçenekleri kullanmak, işlevin başarılı mı yoksa başarısız mı olduğunu belirtmeye yardımcı olacaktır.
Bir seçeneğin temel bir türü vardır ve bu türden bir değeri tutabilir veya bir değeri olmayabilir.
Seçenekleri Kullanma
Bölme işlevi örneğini alalım. Aşağıdaki program bunu açıklıyor -
Bir div fonksiyonu yazalım ve 20 ve 5'e iki argüman gönderelim -
let div x y = x / y
let res = div 20 5
printfn "Result: %d" res
Programı derleyip çalıştırdığınızda, aşağıdaki çıktıyı verir -
Result: 4
İkinci argüman sıfırsa, program bir istisna atar -
let div x y = x / y
let res = div 20 0
printfn "Result: %d" res
Programı derleyip çalıştırdığınızda, aşağıdaki çıktıyı verir -
Unhandled Exception:
System.DivideByZeroException: Division by zero
Bu gibi durumlarda, işlem başarılı olduğunda Some (değer) veya işlem başarısız olursa None döndürmek için seçenek türlerini kullanabiliriz.
Aşağıdaki örnek seçeneklerin kullanımını göstermektedir -
Misal
let div x y =
match y with
| 0 -> None
| _ -> Some(x/y)
let res : int option = div 20 4
printfn "Result: %A " res
Programı derleyip çalıştırdığınızda, aşağıdaki çıktıyı verir -
Result: Some 5
Seçenek Özellikleri ve Yöntemleri
Seçenek türü aşağıdaki özellikleri ve yöntemleri destekler -
Özellik veya yöntem | Tür | Açıklama |
---|---|---|
Yok | 'T seçeneği | Şu özelliklere sahip bir seçenek değeri oluşturmanıza olanak tanıyan statik bir özellik None value. |
IsNone | bool | İadeler true seçenek varsa None değer. |
Biraz | bool | İadeler true seçenek, olmayan bir değere sahipse None. |
Biraz | 'T seçeneği | Olmayan bir değere sahip bir seçenek oluşturan statik bir üye None. |
Değer | 'T | Temel alınan değeri döndürür veya değer ise bir NullReferenceExceptionoluşturur None. |
örnek 1
let checkPositive (a : int) =
if a > 0 then
Some(a)
else
None
let res : int option = checkPositive(-31)
printfn "Result: %A " res
Programı derleyip çalıştırdığınızda, aşağıdaki çıktıyı verir -
Result: <null>
Örnek 2
let div x y =
match y with
| 0 -> None
| _ -> Some(x/y)
let res : int option = div 20 4
printfn "Result: %A " res
printfn "Result: %A " res.Value
Programı derleyip çalıştırdığınızda, aşağıdaki çıktıyı verir -
Result: Some 5
Result: 5
Örnek 3
let isHundred = function
| Some(100) -> true
| Some(_) | None -> false
printfn "%A" (isHundred (Some(45)))
printfn "%A" (isHundred (Some(100)))
printfn "%A" (isHundred None)
Programı derleyip çalıştırdığınızda, aşağıdaki çıktıyı verir -
false
true
false