このトピックでは、F# で使用される型と、F# 型を指定および記述する方法について説明します。
F# 型の概要
型によっては、ブール型 や整数および浮動小数点型など、さまざまなサイズの ''bool'' と見なされるものがあります。これらには、バイトと文字の型が含まれます。 これらの型については、プリミティブ型に関するページを参照してください。
言語に組み込まれているその他の型には、タプル、リスト、配列、シーケンス、レコード、判別共用体が含まれます。 他の .NET 言語の経験があり、F# について学習する場合は、これらの各型についてのトピックを参照してください。 これらの F# 固有の型では、関数型プログラミング言語に共通のプログラミングのスタイルがサポートされています。 これらの型の多くは、それらの型に対する一般的な操作をサポートする F# ライブラリ内のモジュールに関連付けられています。
関数の型には、パラメーターの型と戻り値の型に関する情報が含まれています。
.NET Framework は、オブジェクト型、インターフェイス型、デリゲート型などのソースです。 他の .NET 言語の場合と同様に、独自のオブジェクト型を定義できます。
また、F# コードでは、''型略称'' という別名を定義できます。これらは型の代替名です。 型が将来変更される可能性があり、型に依存するコードを変更しないようにする場合は、型略称を使用できます。 または、コードを読みやすく理解しやすくできる型のフレンドリ名として、型略称を使用することもできます。
F# では、関数型プログラミングを考慮して設計された便利なコレクション型が提供されます。 これらのコレクション型を使用すると、スタイルでより機能的なコードを記述するのに役立ちます。 詳細については、「F# コレクション型」を参照してください。
型の構文
F# コードでは、多くの場合、型の名前を記述する必要があります。 すべての型には構文形式があり、型の注釈、抽象メソッドの宣言、デリゲート宣言、シグネチャ、およびその他のコンストラクトでこれらの構文形式を使用します。 インタープリターで新しいプログラム コンストラクトを宣言するたびに、インタープリターにより、コンストラクトの名前とその型の構文が出力されます。 この構文は、ユーザー定義型では単なる識別子、または int や string などでは組み込み識別子である場合もありますが、より複雑な型では、構文がより複雑になります。
次の表には、F# 型の型構文の側面が示されています。
| タイプ | 型の構文 | 例 |
|---|---|---|
| プリミティブ型 | type-name | intfloatstring |
| 集約型 (クラス、構造体、共用体、レコード、列挙型など) | type-name | System.DateTimeColor |
| 型略称 | type-abbreviation-name | bigint |
| 完全修飾型 |
namespaces.type-name or modules.type-name or 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-parametergeneric-type-name or generic-type-name<type-parameter-list> |
'a listlist<'a>Dictionary<'key, 'value> |
| 構築型 (特定の型引数が指定されたジェネリック型) |
type-argumentgeneric-type-name or generic-type-name<type-argument-list> |
int optionstring listint refoption<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 型 |
unit 型について説明します。この型は、1 つの値を持ち、() で示されます。これは、C# では void、Visual Basic ではNothing に相当します。 |
| タプル | タプル型について説明します。この型は、ペア、3 要素、4 要素などでグループ化された任意の型の関連値で構成されます。 |
| [オプション] | オプション型について説明します。この型は、値を持つか空にすることができます。 |
| リスト | 順序が指定されており、変更できない一連のすべて同じ型の要素であるリストについて説明します。 |
| 配列 | 配列について説明します。これらは、連続したメモリ ブロックを占有し、固定サイズである同じ型の変更可能な要素の順序付けされたセットです。 |
| シーケンス | 論理的な一連の値を表すシーケンス型について説明します。個々の値は、必要な場合にのみ計算されます。 |
| レコード | レコード型について説明します。これは、名前付きの値の小さな集計です。 |
| 判別共用体 | 判別共用体型について説明します。これは、値を一連の使用可能な型のいずれかにすることができる型です。 |
| 関数 | 関数の値について説明します。 |
| クラス | .NET 参照型に対応するオブジェクト型であるクラス型について説明します。 クラス型には、メンバー、プロパティ、実装されたインターフェイス、および基本型を含めることができます。 |
| 構造体 | .NET 値型に対応するオブジェクト型である struct 型について説明します。 通常、struct 型はデータの小さな集計を表します。 |
| インターフェイス | インターフェイス型について説明します。これらは、特定の機能を提供するものの、データを含まない一連のメンバーを表す型です。 インターフェイス型は、役立つようにオブジェクト型によって実装される必要があります。 |
| デリゲート | 関数をオブジェクトとして表すデリゲート型について説明します。 |
| 列挙型 | 値が一連の名前付きの値に属している列挙型について説明します。 |
| 属性 | 別の型のメタデータを指定するために使用される属性について説明します。 |
| 例外の種類 | エラー情報を指定する例外について説明します。 |
.NET