옵션Options

옵션 형식 F# 명명 된 값 또는 변수를 실제 값이 존재 하지 않을 때 사용 됩니다.The option type in F# is used when an actual value might not exist for a named value or variable. 옵션은 기본 형식이 고 해당 형식의 값을 보유할 수 또는 값이 없을 수 있습니다.An option has an underlying type and can hold a value of that type, or it might not have a value.

설명Remarks

다음 코드에서는 옵션 형식을 생성 하는 함수를 보여 줍니다.The following code illustrates a function which generates an option type.

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

알 수 있듯이, 경우 입력 a 가 0 보다 크면 Some(a) 생성 됩니다.As you can see, if the input a is greater than 0, Some(a) is generated. 그렇지 않으면 None 생성 됩니다.Otherwise, None is generated.

None 옵션을 실제 값이 없는 경우에 사용 됩니다.The value None is used when an option does not have an actual value. 그렇지 않으면 식 Some( ... ) 옵션 값을 제공 합니다.Otherwise, the expression Some( ... ) gives the option a value. Some 하 고 None 다음 함수와 패턴 일치에 유용 exists를 반환 하는 true 옵션 값이 있으면 및 false 그렇지 않은 경우.The values Some and None are useful in pattern matching, as in the following function exists, which returns true if the option has a value and false if it does not.

let exists (x : int option) =
    match x with
    | Some(x) -> true
    | None -> false

옵션을 사용 하 여Using Options

옵션은 검색 일치 하는 결과 반환 하지 않는 경우 사용 일반적으로 다음 코드 에서처럼.Options are commonly used when a search does not return a matching result, as shown in the following code.

let rec tryFindMatch pred list =
    match list with
    | head :: tail -> if pred(head)
                        then Some(head)
                        else tryFindMatch pred tail
    | [] -> None

// result1 is Some 100 and its type is int option.
let result1 = tryFindMatch (fun elem -> elem = 100) [ 200; 100; 50; 25 ]

// result2 is None and its type is int option.
let result2 = tryFindMatch (fun elem -> elem = 26) [ 200; 100; 50; 25 ]

이전 코드에서 목록을 재귀적으로 검색된 합니다.In the previous code, a list is searched recursively. 함수 tryFindMatch 조건자 함수 pred 검색할 목록 및 부울 값을 반환 합니다.The function tryFindMatch takes a predicate function pred that returns a Boolean value, and a list to search. 조건자를 만족 하는 요소가 없으면 멈추고 함수 값을 반환 식의 옵션으로 Some(head)입니다.If an element that satisfies the predicate is found, the recursion ends and the function returns the value as an option in the expression Some(head). 재귀에는 빈 목록에 일치 하는 경우 종료 됩니다.The recursion ends when the empty list is matched. 값을 해당 시점 head 검색 되지 않은 및 None 반환 됩니다.At that point the value head has not been found, and None is returned.

많은 F# 수도 반환 존재 하지 않을 수 있는 값에 대 한 컬렉션을 검색 하는 라이브러리 함수는 option 형식입니다.Many F# library functions that search a collection for a value that may or may not exist return the option type. 규칙에 따라 이러한 기능으로 시작 합니다 try 접두사, 예를 들어 Seq.tryFindIndex 합니다.By convention, these functions begin with the try prefix, for example, Seq.tryFindIndex.

예를 들어 값을 생성 하려고 할 때 예외가 throw 될 수 있으면 값을 존재 하지 않을 때에 옵션 유용할 수 있습니다.Options can also be useful when a value might not exist, for example if it is possible that an exception will be thrown when you try to construct a value. 다음 코드 예제에서는 그 구체적인 방법을 보여 줍니다.The following code example illustrates this.

open System.IO
let openFile filename =
    try
        let file = File.Open (filename, FileMode.Create)
        Some(file)
    with
        | ex -> eprintf "An exception occurred with message %s" ex.Message
                None

합니다 openFile 이전 예제의 함수 형식이 string -> File option 반환 하기 때문에 File 파일을 성공적으로 열리는 경우 개체 및 None 예외가 발생 한 경우.The openFile function in the previous example has type string -> File option because it returns a File object if the file opens successfully and None if an exception occurs. 상황에 따라 전파 되도록 허용 하는 대신 예외를 catch 하는 적절 한 설계 선택 되지 않습니다 수 있습니다.Depending on the situation, it may not be an appropriate design choice to catch an exception rather than allowing it to propagate.

또한 것도 가능 전달할 null 또는 null 값을 Some 옵션의 경우.Additionally, it is still possible to pass null or a value that is null to the Some case of an option. 이 방법은 일반적으로 사용 하지 않아야 루틴에는 일반적으로 F# .net에서 참조 형식의 특성으로 인해 가능한 비슷하나 프로그래밍 합니다.This is generally to be avoided, and typically is in routine F# programming, but is possible due to the nature of reference types in .NET.

옵션 속성 및 메서드Option Properties and Methods

옵션 종류는 다음 속성 및 메서드를 지원합니다.The option type supports the following properties and methods.

속성 또는 메서드Property or method 형식Type 설명Description
없음None 'T option 이 있는 옵션 값을 만들 수 있게 하는 정적 속성은 None 값입니다.A static property that enables you to create an option value that has the None value.
IsNoneIsNone bool 반환 true 옵션에는 None 값입니다.Returns true if the option has the None value.
IsSomeIsSome bool 반환 true 옵션을 하지 않은 값이 있으면 None합니다.Returns true if the option has a value that is not None.
일부Some 'T option 옵션을 만드는 정적 멤버인 되지 않는 값이 None합니다.A static member that creates an option that has a value that is not None.
Value 'T 기본 값을 반환 하거나 throw 된 System.NullReferenceException 값이 None합니다.Returns the underlying value, or throws a System.NullReferenceException if the value is None.

Option 모듈Option Module

모듈이 옵션, 옵션에 대 한 작업을 수행 하는 유용한 함수를 포함 하는 합니다.There is a module, Option, that contains useful functions that perform operations on options. 일부 함수 속성의 기능을 반복 하지만 함수가 필요한 상황에서 유용 합니다.Some functions repeat the functionality of the properties but are useful in contexts where a function is needed. Option.isSome 하 고 Option.isNone 옵션 값을 보유 하는지 여부를 테스트 하는 모듈 함수가 모두 합니다.Option.isSome and Option.isNone are both module functions that test whether an option holds a value. Option.get 있을 경우 값을 가져옵니다.Option.get obtains the value, if there is one. 값이 없는 경우 throw System.ArgumentException합니다.If there is no value, it throws System.ArgumentException.

합니다 Option.bind 함수 값 이면 값의 함수를 실행 합니다.The Option.bind function executes a function on the value, if there is a value. 함수는 정확히 하나의 인수를 취해야 및 해당 매개 변수 형식은 옵션 형식 이어야 합니다.The function must take exactly one argument, and its parameter type must be the option type. 함수의 반환 값은 다른 옵션 종류입니다.The return value of the function is another option type.

또한 옵션 모듈에는 목록, 배열, 시퀀스 및 기타 컬렉션 형식에 사용할 수 있는 함수에 해당 하는 함수가 포함 됩니다.The option module also includes functions that correspond to the functions that are available for lists, arrays, sequences, and other collection types. 이러한 함수를 포함 Option.map , Option.iter Option.forall Option.exists 합니다 Option.foldBack 하십시오 Option.fold , 및 Option.count 합니다.These functions include Option.map, Option.iter, Option.forall, Option.exists, Option.foldBack, Option.fold, and Option.count. 이러한 함수를 0 개 또는 한 요소의 모음 처럼 사용할 옵션을 사용 합니다.These functions enable options to be used like a collection of zero or one elements. 자세한 내용 및 예제에서 컬렉션 함수 설명을 참조 하십시오 나열합니다.For more information and examples, see the discussion of collection functions in Lists.

다른 형식으로 변환Converting to Other Types

옵션 목록 또는 배열에 변환할 수 있습니다.Options can be converted to lists or arrays. 이러한 데이터 구조를 옵션으로 변환 하는 경우 결과 데이터 구조에 0 개 이상의 요소가 있습니다.When an option is converted into either of these data structures, the resulting data structure has zero or one element. 사용 옵션을 배열로 변환할 Option.toArray 합니다.To convert an option to an array, use Option.toArray. 사용 옵션 목록을 변환할 Option.toList 합니다.To convert an option to a list, use Option.toList.

참고자료See also