Delen via


Waardeopties

Het type waardeoptie in F# wordt gebruikt wanneer de volgende twee omstandigheden zich bevinden:

  1. Een scenario is geschikt voor een F#-optie.
  2. Het gebruik van een struct biedt een prestatievoordeel in uw scenario.

Niet alle prestatiegevoelige scenario's worden 'opgelost' met behulp van structs. U moet rekening houden met de extra kosten voor het kopiëren wanneer u ze gebruikt in plaats van referentietypen. Grote F#-programma's instantiëren echter vaak veel optionele typen die door dynamische paden stromen, en in dergelijke gevallen kunnen structs vaak betere algehele prestaties opleveren gedurende de levensduur van een programma.

Definitie

Waardeoptie wordt gedefinieerd als een structdiscrimineerde samenvoeging die vergelijkbaar is met het verwijzingsoptietype. De definitie kan op deze manier worden gezien:

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

Value Option voldoet aan structurele gelijkheid en vergelijking. Het belangrijkste verschil is dat de gecompileerde naam, typenaam en casenamen allemaal aangeven dat het een waardetype is.

Waardeopties gebruiken

Waardeopties worden net als Opties gebruikt. ValueSome wordt gebruikt om aan te geven dat een waarde aanwezig is en ValueNone wordt gebruikt wanneer een waarde niet aanwezig is:

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!"

Net als bij Opties is de naamconventie voor een functie die retourneert ValueOption het voorvoegsel met try.

Eigenschappen en methoden van waardeoptie

Er is op dit moment één eigenschap voor waardeopties: Value. Er InvalidOperationException wordt een verhoogd als er geen waarde aanwezig is wanneer deze eigenschap wordt aangeroepen.

Waardeoptiefuncties

De ValueOption module in FSharp.Core bevat equivalente functionaliteit voor de Option module. Er zijn enkele verschillen in naam, zoals defaultValueArg:

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

Dit werkt net als defaultArg in de Option module, maar werkt in plaats daarvan op een waardeoptie.

Zie ook