Unit 型

unit 型は、特定の値を持たないことを示す型です。unit 型には値が 1 つだけあり、他の値が存在しない場合や不要な場合のプレースホルダーとして機能します。

構文

// The value of the unit type.
()

解説

すべての F# 式は、値に評価される必要があります。 目的の値を生成しない式の場合は、型 unit の値が使用されます。 unit 型は、C# や C++ などの言語の void 型に似ています。

unit 型には単一の値があり、その値はトークン () によって示されます。

F# プログラミングで unit 型の値は、言語の構文によって値が必要とされてはいるものの、何ら値が必要なく、望ましくもない場合に、場所を保持する目的でよく使用されます。 例として、printf 関数の戻り値が挙げられます。 printf 操作の重要なアクションは関数内で発生するため、関数は実際の値を返す必要はありません。 そのため、戻り値の型は unit となります。

一部のコンストラクトでは unit の値が想定されています。 たとえば、モジュールの最上位レベルの do バインドまたはコードは、unit の値に評価されると想定されます。 コンパイラでは、次の例に示すように、モジュールの最上位レベルの do バインドまたはコードが、使用されていない unit の値以外の結果を生成した場合に警告を報告します。

let function1 x y = x + y
// The next line results in a compiler warning.
function1 10 20
// Changing the code to one of the following eliminates the warning.
// Use this when you do want the return value.
let result = function1 10 20
// Use this if you are only calling the function for its side effects,
// and do not want the return value.
function1 10 20 |> ignore

この警告は、関数型プログラミングの特性です。他の .NET プログラミング言語では表示されません。 関数に副作用がない純粋な関数型プログラムでは、最終的な戻り値は関数呼び出しの唯一の結果となります。 そのため、結果が無視された場合は、プログラミング エラーを示している可能性があります。 F# は純粋な関数型プログラミング言語ではありませんが、できる限り関数型プログラミング スタイルに従うことをお勧めします。

関連項目