F # - Options

le optionle type en F # est utilisé dans les calculs lorsqu'il existe ou non une valeur pour une variable ou une fonction. Les types d'options sont utilisés pour représenter des valeurs facultatives dans les calculs. Ils peuvent avoir deux valeurs possibles -Some(x) ou None.

Par exemple, une fonction effectuant une division renverra une valeur en situation normale, mais lèvera des exceptions en cas de dénominateur nul. L'utilisation d'options ici aidera à indiquer si la fonction a réussi ou échoué.

Une option a un type sous-jacent et peut contenir une valeur de ce type, ou elle peut ne pas avoir de valeur.

Utilisation des options

Prenons l'exemple de la fonction de division. Le programme suivant explique cela -

Écrivons une fonction div, et envoyons-lui deux arguments 20 et 5 -

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

Lorsque vous compilez et exécutez le programme, il produit la sortie suivante -

Result: 4

Si le deuxième argument est zéro, le programme lève une exception -

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

Lorsque vous compilez et exécutez le programme, il produit la sortie suivante -

Unhandled Exception:
System.DivideByZeroException: Division by zero

Dans de tels cas, nous pouvons utiliser des types d'option pour renvoyer Some (valeur) lorsque l'opération est réussie ou None si l'opération échoue.

L'exemple suivant illustre l'utilisation d'options -

Exemple

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

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

Lorsque vous compilez et exécutez le programme, il produit la sortie suivante -

Result: Some 5

Propriétés et méthodes des options

Le type d'option prend en charge les propriétés et méthodes suivantes -

Propriété ou méthode Type La description
Aucun Option 'T Une propriété statique qui vous permet de créer une valeur d'option qui a le None value.
IsNone booléen Retour true si l'option a le None valeur.
IsSome booléen Retour true si l'option a une valeur qui n'est pas None.
Certains Option 'T Un membre statique qui crée une option dont la valeur n'est pas None.
Valeur 'T Renvoie la valeur sous-jacente ou lève une exception NullReferenceException si la valeur est None.

Exemple 1

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

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

Lorsque vous compilez et exécutez le programme, il produit la sortie suivante -

Result: <null>

Exemple 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

Lorsque vous compilez et exécutez le programme, il produit la sortie suivante -

Result: Some 5
Result: 5

Exemple 3

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

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

Lorsque vous compilez et exécutez le programme, il produit la sortie suivante -

false
true
false