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