F #-옵션

그만큼 optionF #의 유형은 변수 또는 함수에 대한 값이있을 수도 있고 없을 수도있는 계산에 사용됩니다. 옵션 유형은 계산에서 선택적 값을 나타내는 데 사용됩니다. 두 가지 가능한 값을 가질 수 있습니다.Some(x) 또는 None.

예를 들어, 나누기를 수행하는 함수는 정상적인 상황에서 값을 반환하지만 분모가 0 인 경우 예외를 throw합니다. 여기에서 옵션을 사용하면 함수의 성공 여부를 나타내는 데 도움이됩니다.

옵션에는 기본 유형이 있으며 해당 유형의 값을 보유하거나 값이 없을 수 있습니다.

옵션 사용

나누기 함수의 예를 들어 보겠습니다. 다음 프로그램은 이것을 설명합니다-

함수 div를 작성하고 20과 5에 두 개의 인수를 보냅니다.

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

프로그램을 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다.

Result: 4

두 번째 인수가 0이면 프로그램은 예외를 발생시킵니다.

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

옵션 속성 및 방법

옵션 유형은 다음 속성과 방법을 지원합니다-

재산 또는 방법 유형 기술
없음 'T 옵션 옵션 값을 만들 수있는 정적 속성입니다. None value.
IsNone 부울 보고 true 옵션에 None 값.
IsSome 부울 보고 true 옵션에 그렇지 않은 값이있는 경우 None.
약간 'T 옵션 값이 아닌 옵션을 만드는 정적 멤버 None.
'티 기본 값을 반환하거나 값이 다음과 같은 경우 NullReferenceException을 throw합니다. 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)

프로그램을 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다.

false
true
false