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