F#-Typen

Dieser Artikel beschreibt die Typen, die in F# verwendet werden und wie F#-Typen benannt und beschrieben werden.

Zusammenfassung der F#-Typen

Einige Typen gelten als primitive Typen, z. B. der boolesche Typ bool und integrale Typen sowie Gleitkommatypen verschiedener Größen, die Typen für Bytes und Zeichen enthalten. Diese Typen werden in primitiven Typen beschrieben.

Andere Typen, die in die Sprache integriert sind, sind Tupel, Listen, Arrays, Sequenzen, Datensätze und diskriminierte Union-Typen. Wenn Sie Erfahrung mit anderen .NET-Sprachen haben und F# erlernen, sollten Sie die Artikel für jeden dieser Typen lesen. Diese F#-spezifischen Typen unterstützen Programmierstile, die für funktionale Programmiersprachen gelten. Viele dieser Typen verfügen über zugeordnete Module in der F#-Bibliothek, die allgemeine Vorgänge für diese Typen unterstützen.

Der Typ einer Funktion enthält Informationen zu den Parametertypen und dem Rückgabetyp.

.NET Framework ist die Quelle von Objekttypen, Schnittstellentypen, Delegattypen und anderen. Sie können Ihre eigenen Objekttypen genauso wie in jeder anderen .NET-Sprache definieren.

Außerdem kann F#-Code Aliase definieren, die benannte Typkürzungen sind, die alternative Namen für Typen sind. Sie können Typkürzungen verwenden, wenn sich der Typ in Zukunft möglicherweise ändert, und Sie sollten vermeiden, den Code zu ändern, der vom Typ abhängt. Alternativ können Sie eine Typkürzung als Anzeigenamen für einen Typ verwenden, der das Lesen und Verstehen von Code erleichtern kann.

F# bietet nützliche Sammlungstypen, die mit funktionaler Programmierung konzipiert sind. Die Verwendung dieser Sammlungstypen hilft Ihnen beim Schreiben von funktionalerem Code. Weitere Informationen finden Sie unter F#-Sammlungstypen.

Syntax für Typen

In F#-Code müssen Sie häufig die Namen von Typen ausschreiben. Jeder Typ verfügt über ein syntaktisches Formular, und Sie verwenden diese syntaktischen Formulare in Typanmerkungen, abstrakte Methodendeklarationen, Delegatdeklarationen, Signaturen und anderen Konstrukten. Wenn Sie ein neues Programmkonstrukt im Interpreter deklarieren, druckt der Interpreter den Namen des Konstrukts und die Syntax für den zugehörigen Typ. Diese Syntax kann nur ein Bezeichner für einen benutzerdefinierten Typ oder einen integrierten Bezeichner sein, z. B. für int oder string, aber für komplexere Typen ist die Syntax komplexer.

Die folgende Tabelle enthält Aspekte der Typsyntax für F#-Typen.

type Syntax für Typen Beispiele
Primitiver Typ type-name int

float

string
Aggregattyp (Klasse, Struktur, Union, Datensatz, Enumeration usw.) type-name System.DateTime

Color
Typabkürzung type-abbreviation-name bigint
Der vollqualifizierte Typ namespaces.type-name

oder

modules.type-name

oder

namespaces.modules.type-name
System.IO.StreamWriter
array type-name[] oder

type-name-Array
int[]

array<int>

int array
zweidimensionales Array type-name[,] int[,]

float[,]
dreidimensionales Array type-name[,,] float[,,]
tuple type-name1 * type-name2 ... Beispielsweise weist (1,'b',3) den Typ int * char * int auf.
generischer Typ type-parametergeneric-type-name

oder

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

list<'a>

Dictionary<'key, 'value>
konstruierter Typ (ein generischer Typ, der ein bestimmtes Typargument enthält) type-argumentgeneric-type-name

oder

generic-type-name<type-argument-list>
int option

string list

int ref

option<int>

list<string>

ref<int>

Dictionary<int, string>
Funktionstyp mit einem einzelnen Parameter parameter-type1 ->return-type Eine Funktion, die einen int übernimmt und einen string zurückgibt, verfügt über den Typ int -> string.
Funktionstyp mit mehreren Parametern parameter-type1 ->parameter-type2 -> ... ->return-type Eine Funktion, die einen int und float übernimmt und einen string zurückgibt, verfügt über den Typ int -> float -> string.
Höhere Ordnungsfunktion als Parameter (function-type) List.map weist den Typ ('a -> 'b) -> 'a list -> 'b list auf.
delegate Delegat von function-type delegate of unit -> int
Flexibler Typ #type-name #System.Windows.Forms.Control

#seq<int>
Thema Beschreibung
Primitive Typen Beschreibt integrierte einfache Typen wie integrale Typen, boolesche Typen und Zeichentypen
Unit-Typ Beschreibt den unit-Typ, einen Typ, der einen Wert aufweist und durch () angegeben wird; entspricht void in C# und Nothing in Visual Basic
Tupel Beschreibt den Tupeltyp, einen Typ, der aus zugeordneten Werten eines beliebigen Typs besteht, der in Paaren, Tripeln, Quadrupeln usw. gruppiert ist
Optionen Beschreibt den Optionstyp, einen Typ, der entweder einen Wert aufweist oder leer ist
Listen Beschreibt Listen, die sortierte, unveränderliche Reihen von Elementen desselben Typs sind.
Arrays Beschreibt Arrays, die geordnete Gruppen von veränderbaren Elementen desselben Typs sind, die einen zusammenhängenden Speicherblock belegen und eine feste Größe aufweisen
Sequenzen Beschreibt den Sequenztyp, der eine logische Reihe von Werten darstellt. Einzelne Werte werden nur bei Bedarf berechnet.
Datensätze Beschreibt den Datensatztyp, ein kleines Aggregat benannter Werte
Unterscheidungs-Unions Beschreibt den diskriminierten Union-Typ, einen Typ, dessen Werte eine beliebige Gruppe möglicher Typen sein können
Funktionen Beschreibt Funktionswerte
Klassen Beschreibt den Klassentyp, einen Objekttyp, der einem .NET-Verweistyp entspricht. Klassentypen können Member, Eigenschaften, implementierte Schnittstellen und einen Basistyp enthalten.
Strukturen Beschreibt den struct-Typ, einen Objekttyp, der einem .NET-Werttyp entspricht. Der struct-Typ stellt in der Regel ein kleines Datenaggregat dar.
Schnittstellen Beschreibt Schnittstellentypen, bei denen es sich um Typen handelt, die eine Gruppe von Membern darstellen, die bestimmte Funktionen bereitstellen, aber keine Daten enthalten. Ein Schnittstellentyp muss von einem Objekttyp implementiert werden, um nützlich zu sein.
Delegaten Beschreibt den Delegattyp, der eine Funktion als Objekt darstellt
Enumerationen Beschreibt Enumerationstypen, deren Werte zu einer Gruppe benannter Werte gehören
Attribute Beschreibt Attribute, die zum Angeben von Metadaten für einen anderen Typ verwendet werden
Ausnahmetypen Beschreibt Ausnahmen, die Fehlerinformationen angeben