F # - Optionen

Das optionDie Eingabe von F # wird in Berechnungen verwendet, wenn möglicherweise ein Wert für eine Variable oder Funktion vorhanden ist oder nicht. Optionstypen werden zur Darstellung optionaler Werte in Berechnungen verwendet. Sie können zwei mögliche Werte haben -Some(x) oder None.

Beispielsweise gibt eine Funktion, die eine Division ausführt, in einer normalen Situation einen Wert zurück, löst jedoch bei einem Nenner von Null Ausnahmen aus. Wenn Sie hier Optionen verwenden, können Sie angeben, ob die Funktion erfolgreich war oder fehlgeschlagen ist.

Eine Option hat einen zugrunde liegenden Typ und kann einen Wert dieses Typs enthalten, oder sie hat möglicherweise keinen Wert.

Optionen verwenden

Nehmen wir das Beispiel der Teilungsfunktion. Das folgende Programm erklärt dies -

Schreiben wir eine Funktion div und senden zwei Argumente an sie 20 und 5 -

let div x y = x / y
let res = div 20 5
printfn "Result: %d" res

Wenn Sie das Programm kompilieren und ausführen, wird die folgende Ausgabe ausgegeben:

Result: 4

Wenn das zweite Argument Null ist, löst das Programm eine Ausnahme aus -

let div x y = x / y
let res = div 20 0
printfn "Result: %d" res

Wenn Sie das Programm kompilieren und ausführen, wird die folgende Ausgabe ausgegeben:

Unhandled Exception:
System.DivideByZeroException: Division by zero

In solchen Fällen können wir Optionstypen verwenden, um Some (Wert) zurückzugeben, wenn die Operation erfolgreich ist, oder None, wenn die Operation fehlschlägt.

Das folgende Beispiel zeigt die Verwendung von Optionen -

Beispiel

let div x y =
   match y with
   | 0 -> None
   | _ -> Some(x/y)

let res : int option = div 20 4
printfn "Result: %A " res

Wenn Sie das Programm kompilieren und ausführen, wird die folgende Ausgabe ausgegeben:

Result: Some 5

Optionseigenschaften und -methoden

Der Optionstyp unterstützt die folgenden Eigenschaften und Methoden:

Eigenschaft oder Methode Art Beschreibung
Keiner 'T Option Eine statische Eigenschaft, mit der Sie einen Optionswert mit dem folgenden Wert erstellen können None value.
IsNone Bool Kehrt zurück true wenn die Option die hat None Wert.
IsSome Bool Kehrt zurück true wenn die Option einen Wert hat, der nicht ist None.
Etwas 'T Option Ein statisches Element, das eine Option erstellt, deren Wert dies nicht ist None.
Wert 'T. Gibt den zugrunde liegenden Wert zurück oder löst eine NullReferenceException aus, wenn der Wert lautet None.

Beispiel 1

let checkPositive (a : int) =
   if a > 0 then
      Some(a)
   else
      None

let res : int option = checkPositive(-31)
printfn "Result: %A " res

Wenn Sie das Programm kompilieren und ausführen, wird die folgende Ausgabe ausgegeben:

Result: <null>

Beispiel 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

Wenn Sie das Programm kompilieren und ausführen, wird die folgende Ausgabe ausgegeben:

Result: Some 5
Result: 5

Beispiel 3

let isHundred = function
   | Some(100) -> true
   | Some(_) | None -> false

printfn "%A" (isHundred (Some(45)))
printfn "%A" (isHundred (Some(100)))
printfn "%A" (isHundred None)

Wenn Sie das Programm kompilieren und ausführen, wird die folgende Ausgabe ausgegeben:

false
true
false