Учебники

F # — Опции

Тип опции в F # используется в вычислениях, когда может существовать или не существовать значение для переменной или функции. Типы опций используются для представления необязательных значений в расчетах. Они могут иметь два возможных значения — Some (x) или None .

Например, функция, выполняющая деление, вернет значение в обычной ситуации, но выдаст исключения в случае нулевого знаменателя. Использование параметров здесь поможет указать, была ли функция успешной или неудачной.

Опция имеет базовый тип и может содержать значение этого типа или может не иметь значения.

Использование параметров

Давайте возьмем пример функции деления. Следующая программа объясняет это —

Давайте напишем функцию div и отправим ей два аргумента 20 и 5 —

Live Demo

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

Когда вы компилируете и запускаете программу, она выдает следующий вывод:

Result: 4

Если второй аргумент равен нулю, то программа выдает исключение —

Live Demo

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

Когда вы компилируете и запускаете программу, она выдает следующий вывод:

Unhandled Exception:
System.DivideByZeroException: Division by zero

В таких случаях мы можем использовать типы опций, чтобы возвращать Some (значение) в случае успешной операции или None в случае сбоя операции.

Следующий пример демонстрирует использование опций —

пример

Live Demo

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

Live Demo

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

Live Demo

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

Live Demo

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

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

Когда вы компилируете и запускаете программу, она выдает следующий вывод: