Partager via


Options de valeur

Le type d’option Valeur dans F# est utilisé lorsque les deux circonstances suivantes sont conservées :

  1. Un scénario est approprié pour une option F#.
  2. L’utilisation d’un struct offre un avantage en matière de performances dans votre scénario.

Tous les scénarios respectant les performances ne sont pas « résolus » à l’aide de structs. Vous devez prendre en compte le coût supplémentaire de la copie lors de leur utilisation au lieu de types référence. Toutefois, les programmes F# volumineux instancient couramment de nombreux types facultatifs qui transitent par des chemins d’accès chauds, et dans ce cas, les structs peuvent souvent obtenir de meilleures performances globales au cours de la durée de vie d’un programme.

Définition

L’option valeur est définie comme une union discriminée de struct similaire au type d’option de référence. Sa définition peut être considérée de cette façon :

[<StructuralEquality; StructuralComparison>]
[<Struct>]
type ValueOption<'T> =
    | ValueNone
    | ValueSome of 'T

L’option 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 comme Options. ValueSome est utilisé pour indiquer qu’une valeur est présente et ValueNone est utilisée lorsqu’une valeur n’est pas 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!"

Comme avec Options, la convention d’affectation de noms d’une fonction qui retourne ValueOption est de la préfixer tryavec .

Propriétés et méthodes d’option valeur

Il existe une propriété pour les options de valeur à l’heure actuelle : Value. Une InvalidOperationException valeur est levée si aucune valeur n’est présente lorsque cette propriété est appelée.

Fonctions d’option valeur

Le ValueOption module dans FSharp.Core contient des fonctionnalités équivalentes au Option module. Il existe quelques différences de nom, telles que defaultValueArg:

val defaultValueArg : arg:'T voption -> defaultValue:'T -> 'T

Cela agit comme defaultArg dans le module, mais fonctionne sur une option valeur à la Option place.

Voir aussi