F# の型

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

F# の型の概要

ブール型 bool や、バイトおよび文字の型を含むさまざまなサイズの整数型と浮動小数点型など、一部の型はプリミティブ型と見なされます。これらの型については、「プリミティブ型 (F#)」を参照してください。

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

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

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

さらに、F# コードでは、型の代替名であるエイリアス (型略称と呼ばれる) を定義できます。型が将来、変更される可能性があると、その型に依存するコードの変更が必要になるおそれがあります。これを避けるために、型略称を使用することもできます。また、型略称を型の表示名として使用して、コードをわかりやすくすることもできます。

F# 関数型プログラミングを考慮して設計されています便利なコレクション型を提供します。これらのコレクション型を使用して、スタイルより高機能なコードを記述することができます。詳細については、「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-parametergeneric-type-name

または

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

'a list

list<'a>

Dictionary<'key, 'value>

構築型 (特定の型引数が指定されたジェネリック型)

type-argumentgeneric-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 です。

delegate

function-type のデリゲート

delegate of unit -> int

フレキシブル型

#type-name

#System.Windows.Forms.Control

#seq<int>

関連トピック

トピック

Description

プリミティブ型 (F#)

整数型、ブール型、文字型などの組み込み単純型について説明します。

unit 型 (F#)

unit 型について説明します。この型は、1 つの値を持ち、() で示されます。C# では void、Visual Basic では Nothing に相当します。

タプル (F#)

タプル型について説明します。この型は、2 つ一組、3 つ一組、4 つ一組などにグループ化された任意の型の関連する値で構成されます。

オプション (F#)

オプション型について説明します。この型は、値がある場合と空の場合があります。

リスト (F#)

リストについて説明します。リストは、順序が指定された、変更できない、すべて同じ型の一連の要素です。

配列 (F#)

配列について説明します。配列は、順序が指定された、同じ型の一連の変更可能な要素であり、1 つの連続するメモリ ブロックを占有し、サイズは固定です。

シーケンス (F#)

シーケンス型について説明します。この型は論理的に順序付けられた一連の値を表し、個々の値は必要な場合にのみ計算されます。

レコード (F#)

レコード型について説明します。この型は、名前付きの値の小規模な集約です。

判別共用体 (F#)

判別共用体型について説明します。この型の値は、一連の使用可能な型のいずれかになります。

関数 (F#)

関数の値について説明します。

クラス (F#)

クラス型について説明します。この型は、.NET の参照型に対応するオブジェクト型です。クラス型には、メンバー、プロパティ、実装されているインターフェイス、および基本型を含めることができます。

構造体 (F#)

struct 型について説明します。この型は、.NET の値型に対応するオブジェクト型です。struct 型は、通常、データの小規模な集約を表します。

インターフェイス (F#)

インターフェイス型について説明します。この型は、特定の機能を提供するが、データを含まない一連のメンバーを表します。インターフェイス型を有効に使用するには、オブジェクト型で実装する必要があります。

デリゲート (F#)

デリゲート型について説明します。この型は、関数をオブジェクトとして表します。

列挙型 (F#)

列挙型について説明します。この型の値は、一連の名前付きの値に属します。

属性 (F#)

属性について説明します。属性は、別の型のメタデータを指定するために使用します。

例外の種類 (F#)

例外について説明します。例外は、エラー情報を指定します。