F# の型

このトピックでは、F# で使用される型と、F# 型を指定および記述する方法について説明します。

F# 型の概要

型によっては、ブール型 bool や整数および浮動小数点型など、さまざまなサイズの ''プリミティブ型'' と見なされるものがあります。これらには、バイトと文字の型が含まれます。 これらの型については、プリミティブ型に関するページを参照してください。

言語に組み込まれているその他の型には、タプル、リスト、配列、シーケンス、レコード、判別共用体が含まれます。 他の .NET 言語の経験があり、F# について学習する場合は、これらの各型についてのトピックを参照してください。 これらの F# 固有の型では、関数型プログラミング言語に共通のプログラミングのスタイルがサポートされています。 これらの型の多くは、それらの型に対する一般的な操作をサポートする F# ライブラリ内のモジュールに関連付けられています。

関数の型には、パラメーターの型と戻り値の型に関する情報が含まれています。

.NET Framework は、オブジェクト型、インターフェイス型、デリゲート型などのソースです。 他の .NET 言語の場合と同様に、独自のオブジェクト型を定義できます。

また、F# コードでは、''型略称'' という別名を定義できます。これらは型の代替名です。 型が将来変更される可能性があり、型に依存するコードを変更しないようにする場合は、型略称を使用できます。 または、コードを読みやすく理解しやすくできる型のフレンドリ名として、型略称を使用することもできます。

F# では、関数型プログラミングを考慮して設計された便利なコレクション型が提供されます。 これらのコレクション型を使用すると、スタイルでより機能的なコードを記述するのに役立ちます。 詳細については、「F# コレクション型」を参照してください。

型の構文

F# コードでは、多くの場合、型の名前を記述する必要があります。 すべての型には構文形式があり、型の注釈、抽象メソッドの宣言、デリゲート宣言、シグネチャ、およびその他のコンストラクトでこれらの構文形式を使用します。 インタープリターで新しいプログラム コンストラクトを宣言するたびに、インタープリターにより、コンストラクトの名前とその型の構文が出力されます。 この構文は、ユーザー定義型では単なる識別子、または intstring などでは組み込み識別子である場合もありますが、より複雑な型では、構文がより複雑になります。

次の表には、F# 型の型構文の側面が示されています。

種類 型の構文
プリミティブ型 type-name int

float

string
集約型 (クラス、構造体、共用体、レコード、列挙型など) type-name System.DateTime

Color
型略称 type-abbreviation-name bigint
完全修飾型 namespaces.type-name

or

modules.type-name

or

namespaces.modules.type-name
System.IO.StreamWriter
array type-name[] または

type-name 配列
int[]

array<int>

int array
2 次元配列 type-name[,] int[,]

float[,]
3 次元配列 type-name[,,] float[,,]
tuple type-name1 * type-name2 ... たとえば、(1,'b',3) の場合、型は int * char * int となります
ジェネリック型 type-parameter generic-type-name

or

generic-type-name<type-parameter-list>
'a list

list<'a>

Dictionary<'key, 'value>
構築型 (特定の型引数が指定されたジェネリック型) type-argument generic-type-name

or

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 を受け取り、int -> string 型の string を返す関数
複数のパラメーターを持つ関数型 parameter-type1 -> parameter-type2 -> ... -> return-type int および float を受け取り、int -> float -> string 型の string を返す関数
パラメーターとしての高階関数 (function-type) List.map の型は ('a -> 'b) -> 'a list -> 'b list となります
delegate function-type のデリゲート delegate of unit -> int
フレキシブル型 #type-name #System.Windows.Forms.Control

#seq<int>
トピック 説明
プリミティブ型 整数型、ブール型、文字型など、組み込みの単純型について説明します。
Unit 型 unit 型について説明します。この型は、1 つの値を持ち、() で示されます。これは、C# では void、Visual Basic ではNothing に相当します。
タプル タプル型について説明します。この型は、ペア、3 要素、4 要素などでグループ化された任意の型の関連値で構成されます。
[オプション] オプション型について説明します。この型は、値を持つか空にすることができます。
リスト 順序が指定されており、変更できない一連のすべて同じ型の要素であるリストについて説明します。
配列 配列について説明します。これらは、連続したメモリ ブロックを占有し、固定サイズである同じ型の変更可能な要素の順序付けされたセットです。
シーケンス 論理的な一連の値を表すシーケンス型について説明します。個々の値は、必要な場合にのみ計算されます。
レコード レコード型について説明します。これは、名前付きの値の小さな集計です。
判別共用体 判別共用体型について説明します。これは、値を一連の使用可能な型のいずれかにすることができる型です。
関数 関数の値について説明します。
クラス .NET 参照型に対応するオブジェクト型であるクラス型について説明します。 クラス型には、メンバー、プロパティ、実装されたインターフェイス、および基本型を含めることができます。
構造体 .NET 値型に対応するオブジェクト型である struct 型について説明します。 通常、struct 型はデータの小さな集計を表します。
インターフェイス インターフェイス型について説明します。これらは、特定の機能を提供するものの、データを含まない一連のメンバーを表す型です。 インターフェイス型は、役立つようにオブジェクト型によって実装される必要があります。
デリゲート 関数をオブジェクトとして表すデリゲート型について説明します。
列挙型 値が一連の名前付きの値に属している列挙型について説明します。
属性 別の型のメタデータを指定するために使用される属性について説明します。
例外の種類 エラー情報を指定する例外について説明します。