F# の型
このトピックでは、F# で使用される型とそれらの型を指定および記述する方法について説明します。
F# の型の概要
ブール型 bool や、バイトおよび文字の型を含むさまざまなサイズの整数型と浮動小数点型など、一部の型はプリミティブ型と見なされます。 これらの型については、「プリミティブ型 (F#)」を参照してください。
この言語に組み込まれているその他の型には、組、リスト、配列、シーケンス、レコード、判別共用体などがあります。 他の .NET 言語の使用経験があり、F# を学習中の場合は、これらの各型に関するトピックを参照することをお勧めします。 これらの型の詳細情報へのリンクは、このトピックの「関連トピック」に示されています。 F# 固有のこれらの型は、関数型プログラミング言語に共通するプログラミング スタイルをサポートしています。 これらの型の多くは、これらの型の一般的な操作をサポートする F# ライブラリのモジュールに関連付けられています。
関数の型には、パラメーターの型や戻り値の型に関する情報が含まれます。
オブジェクト型、インターフェイス型、デリゲート型などは、.NET Framework から提供されます。 他の .NET 言語を使用する場合と同様に、独自のオブジェクト型を定義できます。
さらに、F# コードでは、型の代替名であるエイリアス (型の省略形と呼ばれる) を定義できます。 型が将来、変更される可能性があると、その型に依存するコードの変更が必要になるおそれがあります。これを避けるために、型の省略形を使用することもできます。 また、型の省略形を型の表示名として使用して、コードをわかりやすくすることもできます。
型の構文
F# コードでは、型の名前を書き出すことが必要になる場合がよくあります。 すべての型には構文の形式があり、その構文の形式を、型の注釈、抽象メソッドの宣言、デリゲートの宣言、シグネチャ、およびその他の構造で使用します。 インタープリターで新しいプログラム構造を宣言するたびに、構造の名前とその型の構文が出力されます。 この構文は、単に、ユーザー定義型の識別子や、int や string などの型の組み込み識別子であることもありますが、より複雑な型の場合は、構文も複雑になります。
F# の各型に対する型の構文を次の表に示します。
型 |
型の構文 |
例 |
---|---|---|
プリミティブ型 |
type-name |
int float string |
集約型 (クラス、構造体、共用体、レコード、列挙型など) |
type-name |
System.DateTime Color |
型の省略形 |
type-abbreviation-name |
bigint |
完全修飾型 |
namespaces.type-name または modules.type-name または namespaces.modules.type-name |
System.IO.StreamWriter |
配列 |
type-name[] または type-name 配列 |
int[] array<int> int array |
2 次元配列 |
type-name[,] |
int[,] float[,] |
3 次元配列 |
type-name[,,] |
float[,,] |
組 |
type-name1 * type-name2 ... |
たとえば、(1,'b',3) の型は int * char * int です。 |
ジェネリック型 |
type-parameter generic-type-name または generic-type-name<type-parameter-list> |
'a list list<'a> Dictionary<'key, 'value> |
構築型 (特定の型引数が指定されたジェネリック型) |
type-argument generic-type-name または generic-type-name<type-argument-list> |
int option string list int ref option<int> list<string> ref<int> Dictionary<int, string> |
1 つのパラメーターを持つ関数型 |
parameter-type1 -> return-type |
int を受け取り、string を返す関数の型は int -> string です。 |
複数のパラメーターを持つ関数型 |
parameter-type1 -> parameter-type2 -> ... -> return-type |
int と float を受け取り、string を返す関数の型は int -> float -> string です。 |
パラメーターとしての高階関数 |
(function-type) |
List.map の型は ('a -> 'b) -> 'a list -> 'b list です。 |
デリゲート |
function-type のデリゲート |
delegate of unit -> int |
柔軟な型 |
#type-name |
#System.Windows.Forms.Control #seq<int> |
関連トピック
トピック |
説明 |
---|---|
整数型、ブール型、文字型などの組み込み単純型について説明します。 |
|
unit 型について説明します。この型は、1 つの値を持ち、() で示されます。C# では void、Visual Basic では Nothing に相当します。 |
|
組型について説明します。この型は、2 つ一組、3 つ一組、4 つ一組などにグループ化された任意の型の関連する値で構成されます。 |
|
オプション型について説明します。この型は、値がある場合と空の場合があります。 |
|
リストについて説明します。リストは、順序が指定された、変更できない、すべて同じ型の一連の要素です。 |
|
配列について説明します。配列は、順序が指定された、同じ型の一連の変更可能な要素であり、1 つの連続するメモリ ブロックを占有し、サイズは固定です。 |
|
シーケンス型について説明します。この型は論理的に順序付けられた一連の値を表し、個々の値は必要な場合にのみ計算されます。 |
|
レコード型について説明します。この型は、名前付きの値の小規模な集約です。 |
|
判別共用体型について説明します。この型の値は、一連の使用可能な型のいずれかになります。 |
|
関数の値について説明します。 |
|
クラス型について説明します。この型は、.NET の参照型に対応するオブジェクト型です。 クラス型には、メンバー、プロパティ、実装されているインターフェイス、および基本型を含めることができます。 |
|
struct 型について説明します。この型は、.NET の値型に対応するオブジェクト型です。 struct 型は、通常、データの小規模な集約を表します。 |
|
インターフェイス型について説明します。この型は、特定の機能を提供するが、データを含まない一連のメンバーを表します。 インターフェイス型を有効に使用するには、オブジェクト型で実装する必要があります。 |
|
デリゲート型について説明します。この型は、関数をオブジェクトとして表します。 |
|
列挙型について説明します。この型の値は、一連の名前付きの値に属します。 |
|
属性について説明します。属性は、別の型のメタデータを指定するために使用します。 |
|
例外について説明します。例外は、エラー情報を指定します。 |