F#-オプション

ザ・ optionF#のタイプは、変数または関数の値が存在する場合と存在しない場合の計算で使用されます。オプションタイプは、計算でオプション値を表すために使用されます。それらは2つの可能な値を持つことができます-Some(x) または None。

たとえば、除算を実行する関数は通常の状況では値を返しますが、分母がゼロの場合は例外をスローします。ここでオプションを使用すると、関数が成功したか失敗したかを示すのに役立ちます。

オプションには基になるタイプがあり、そのタイプの値を保持できます。または、値がない場合があります。

オプションの使用

除算関数の例を見てみましょう。次のプログラムはこれを説明しています-

関数divを記述し、それに2つの引数を送信してみましょう20と5 −

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

プログラムをコンパイルして実行すると、次の出力が得られます。

Result: 4

2番目の引数がゼロの場合、プログラムは例外をスローします-

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。
値 '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)

プログラムをコンパイルして実行すると、次の出力が得られます。

false
true
false