Тип опции в F # используется в вычислениях, когда может существовать или не существовать значение для переменной или функции. Типы опций используются для представления необязательных значений в расчетах. Они могут иметь два возможных значения — Some (x) или None .
Например, функция, выполняющая деление, вернет значение в обычной ситуации, но выдаст исключения в случае нулевого знаменателя. Использование параметров здесь поможет указать, была ли функция успешной или неудачной.
Опция имеет базовый тип и может содержать значение этого типа или может не иметь значения.
Использование параметров
Давайте возьмем пример функции деления. Следующая программа объясняет это —
Давайте напишем функцию div и отправим ей два аргумента 20 и 5 —
let div x y = x / y let res = div 20 5 printfn "Result: %d" res
Когда вы компилируете и запускаете программу, она выдает следующий вывод:
Result: 4
Если второй аргумент равен нулю, то программа выдает исключение —
let div x y = x / y let res = div 20 0 printfn "Result: %d" res
Когда вы компилируете и запускаете программу, она выдает следующий вывод:
Unhandled Exception: System.DivideByZeroException: Division by zero
В таких случаях мы можем использовать типы опций, чтобы возвращать Some (значение) в случае успешной операции или None в случае сбоя операции.
Следующий пример демонстрирует использование опций —
пример
let div x y = match y with | 0 -> None | _ -> Some(x/y) let res : int option = div 20 4 printfn "Result: %A " res
Когда вы компилируете и запускаете программу, она выдает следующий вывод:
Result: Some 5
Свойства и методы опций
Тип параметра поддерживает следующие свойства и методы:
Свойство или метод | Тип | Описание |
---|---|---|
Никто | Т вариант | Статическое свойство, позволяющее создать значение параметра со значением None . |
IsNone | BOOL | Возвращает true, если параметр имеет значение None . |
IsSome | BOOL | Возвращает true, если параметр имеет значение, отличное от None . |
Немного | Т вариант | Статический член, который создает параметр, значение которого не равно None . |
Значение | «T | Возвращает базовое значение или выдает исключение NullReferenceException, если значение равно None . |
Пример 1
let checkPositive (a : int) = if a > 0 then Some(a) else None let res : int option = checkPositive(-31) printfn "Result: %A " res
Когда вы компилируете и запускаете программу, она выдает следующий вывод:
Result: <null>
Пример 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
Когда вы компилируете и запускаете программу, она выдает следующий вывод:
Result: Some 5 Result: 5
Пример 3
let isHundred = function | Some(100) -> true | Some(_) | None -> false printfn "%A" (isHundred (Some(45))) printfn "%A" (isHundred (Some(100))) printfn "%A" (isHundred None)
Когда вы компилируете и запускаете программу, она выдает следующий вывод: