Options de valeur
Le type Option de valeur dans F# est utilisé lorsque les deux circonstances suivantes surviennent :
- Un scénario est approprié pour une Option F#.
- L’utilisation d’un struct confère un avantage en matière de performances dans votre scénario.
Tous les scénarios sensibles aux performances ne sont pas « résolus » à l’aide de structs. Vous devez prendre en compte le coût supplémentaire de la copie lorsque vous les utilisez au lieu des types références. Toutefois, les programmes F# de grande taille instancient généralement de nombreux types facultatifs qui transitent par des chemins d’accès chauds. Dans ce cas, les structs peuvent souvent générer de meilleures performances globales sur la durée de vie d’un programme.
Définition
Le type Option de valeur est défini en tant qu’union discriminée de struct qui est similaire au type Option de référence. Sa définition peut être pensée comme suit :
[<StructuralEquality; StructuralComparison>]
[<Struct>]
type ValueOption<'T> =
| ValueNone
| ValueSome of 'T
Le type Option de valeur est conforme à l’égalité structurelle et à la comparaison. La principale différence est que le nom compilé, le nom de type et les noms de cas indiquent tous qu’il s’agit d’un type valeur.
Utilisation des options de valeur
Les options de valeur sont utilisées de la même façon que les options. ValueSome
est utilisé pour indiquer qu’une valeur est présente et ValueNone
est utilisé lorsqu’aucune valeur n’est présente :
let tryParseDateTime (s: string) =
match System.DateTime.TryParse(s) with
| (true, dt) -> ValueSome dt
| (false, _) -> ValueNone
let possibleDateString1 = "1990-12-25"
let possibleDateString2 = "This is not a date"
let result1 = tryParseDateTime possibleDateString1
let result2 = tryParseDateTime possibleDateString2
match (result1, result2) with
| ValueSome d1, ValueSome d2 -> printfn "Both are dates!"
| ValueSome d1, ValueNone -> printfn "Only the first is a date!"
| ValueNone, ValueSome d2 -> printfn "Only the second is a date!"
| ValueNone, ValueNone -> printfn "None of them are dates!"
À l’instar des Options, la convention d’affectation de noms d’une fonction qui renvoie ValueOption
consiste à la préfixer avec try
.
Méthodes et propriétés des options de valeur
Il existe actuellement une propriété pour les options de valeur : Value
. Une exception InvalidOperationException est déclenchée si aucune valeur n’est présente lorsque cette propriété est appelée.
Fonctions d’option de valeur
Le module ValueOption
dans FSharp.Core contient une fonctionnalité équivalente à celle du module Option
. Il existe quelques différences de nom, comme defaultValueArg
:
val defaultValueArg : arg:'T voption -> defaultValue:'T -> 'T
Cela agit exactement comme defaultArg
dans le module Option
, mais cela fonctionne sur une option de valeur à la place.