option型とは
F#のoption型は、"値" に実際の値が存在しない可能性がある場合に使用されます。option型はジェネリック型のため型パラメータが指定されます。 そして、その型の値を保持することも、その値を保持していないということを表現することも可能です。
また、実際の値が存在している場合にもoption型を利用する場合があります。たとえば、値の有効範囲を決めたい場合に使用します。 これについては後でサンプルを紹介します。
option型は Some と None という2つの状態を持っています。 実際の値がある場合に "Some" となり、実際の値がない場合や不正な値だということを示したい場合には "None" となります。
使い方
intの値が0より大きい場合に Some となり、0以下の場合に None となる値をoption型で見てみましょう。
これは値が存在する場合にtrue、存在しない場合にfalseを返す、exists関数のような関数を作成するときに便利です。
使用用途
option型は一般的に、検索などで一致する結果が得られないなどの状況が発生する関数などで使用されます。
リストから条件に合致する最初の値を返す tryFindMatch 関数をサンプルとして見てみましょう。
コレクションから値を検索する多くのF#ライブラリ関数は、検索した結果をoption型で返します。慣例により、これらの関数名は
値が存在しない可能性がある場合、たとえば値を構成しようとしたときに例外がスローされる可能性がある場合などにも、option型が役に立ちます。
上の例のopenFile関数は、ファイルが正常に開けた場合と、失敗した場合の2つの状態をもつ可能性があります。通常、ファイルのオープンに失敗した場合には例外が発生しますが、このopenFile関数では エラーを出力後にNone を返すようになっています。
この例のように、場合によっては、例外処理をするよりもエラーを出力をするだけの方が適切なときがあります。そういった場合にも、このoption型がよく利用されます。