F#-typer

Det här avsnittet beskriver de typer som används i F# och hur F#-typer namnges och beskrivs.

Sammanfattning av F#-typer

Vissa typer anses vara primitiva typer, till exempel boolesk typ bool och integral och flyttalstyper av olika storlekar, som omfattar typer för byte och tecken. Dessa typer beskrivs i Primitiva typer.

Andra typer som är inbyggda i språket är tupplar, listor, matriser, sekvenser, poster och diskriminerade fackföreningar. Om du har erfarenhet av andra .NET-språk och lär dig F#, bör du läsa ämnena för var och en av dessa typer. Dessa F#-specifika typer stöder programmeringsformat som är gemensamma för funktionella programmeringsspråk. Många av dessa typer har associerade moduler i F#-biblioteket som stöder vanliga åtgärder för dessa typer.

Typen av funktion innehåller information om parametertyperna och returtypen.

.NET Framework är källan till objekttyper, gränssnittstyper, ombudstyper och andra. Du kan definiera dina egna objekttyper precis som på alla andra .NET-språk.

Dessutom kan F#-kod definiera alias, som heter typförkortningar, som är alternativa namn för typer. Du kan använda typförkortningar när typen kan ändras i framtiden och du vill undvika att ändra den kod som är beroende av typen. Eller så kan du använda en typförkortning som ett eget namn för en typ som kan göra koden lättare att läsa och förstå.

F# innehåller användbara samlingstyper som är utformade med funktionell programmering i åtanke. Med de här samlingstyperna kan du skriva kod som är mer funktionell i stil. Mer information finns i F#-samlingstyper.

Syntax för typer

I F#-kod måste du ofta skriva ut namnen på typerna. Varje typ har ett syntaktiskt formulär och du använder dessa syntaktiska formulär i typanteckningar, abstrakta metoddeklarationer, delegatdeklarationer, signaturer och andra konstruktioner. När du deklarerar en ny programkonstruktion i tolken skriver tolken ut namnet på konstruktionen och syntaxen för dess typ. Den här syntaxen kan bara vara en identifierare för en användardefinierad typ eller en inbyggd identifierare, till exempel för int eller string, men för mer komplexa typer är syntaxen mer komplex.

I följande tabell visas aspekter av typsyntaxen för F#-typer.

Typ Typsyntax Exempel
primitiv typ type-name int

float

string
aggregeringstyp (klass, struktur, union, post, uppräkning och så vidare) type-name System.DateTime

Color
typförkortning type-abbreviation-name bigint
fullständigt kvalificerad typ namespaces.type-name

eller

modules.type-name

eller

namespaces.modules.type-name
System.IO.StreamWriter
matris type-name[] eller

type-name-matris
int[]

array<int>

int array
tvådimensionell matris type-name[,] int[,]

float[,]
tredimensionell matris type-name[,,] float[,,]
tuppel type-name1 * type-name2 ... Till exempel (1,'b',3) har typ int * char * int
generisk typ type-parametergeneric-type-name

eller

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

list<'a>

Dictionary<'key, 'value>
konstruerad typ (en allmän typ som har ett specifikt typargument angivet) type-argumentgeneric-type-name

eller

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

string list

int ref

option<int>

list<string>

ref<int>

Dictionary<int, string>
funktionstyp som har en enskild parameter parameter-type1 ->return-type En funktion som tar en int och returnerar en string har typ int -> string
funktionstyp som har flera parametrar parameter-type1 ->parameter-type2 -> ... ->return-type En funktion som tar en int och en float och returnerar en string har typ int -> float -> string
funktionen higher order (högre ordning) som en parameter (funktionstyp) List.map har typ ('a -> 'b) -> 'a list -> 'b list
Delegera ombud för funktionstyp delegate of unit -> int
flexibel typ #type-name #System.Windows.Forms.Control

#seq<int>
Ämnesnamn beskrivning
Primitiva typer Beskriver inbyggda enkla typer som integraltyper, boolesk typ och teckentyper.
Enhetstyp Beskriver unit typen, en typ som har ett värde och som anges av (); motsvarande void i C# och Nothing i Visual Basic.
Tupler Beskriver tuppeltypen, en typ som består av associerade värden av alla typer grupperade i par, tripplar, fyrdubblar och så vidare.
Alternativ Beskriver alternativtypen, en typ som antingen kan ha ett värde eller vara tom.
Listor Beskriver listor, som är ordnade, oföränderliga serier med element av samma typ.
Matriser Beskriver matriser, som är ordnade uppsättningar med föränderliga element av samma typ som upptar ett sammanhängande minnesblock och är av fast storlek.
Sekvenser Beskriver sekvenstypen, som representerar en logisk serie med värden. enskilda värden beräknas endast vid behov.
Poster Beskriver posttypen, en liten mängd namngivna värden.
Diskriminerade fackföreningar Beskriver den diskriminerade unionstypen, en typ vars värden kan vara någon av en uppsättning möjliga typer.
Funktioner Beskriver funktionsvärden.
Klasser Beskriver klasstypen, en objekttyp som motsvarar en .NET-referenstyp. Klasstyper kan innehålla medlemmar, egenskaper, implementerade gränssnitt och en bastyp.
Structs Beskriver struct typen, en objekttyp som motsvarar en .NET-värdetyp. Typen struct representerar vanligtvis en liten mängd data.
Gränssnitt Beskriver gränssnittstyper, som är typer som representerar en uppsättning medlemmar som tillhandahåller vissa funktioner men som inte innehåller några data. En gränssnittstyp måste implementeras av en objekttyp för att vara användbar.
Delegater Beskriver ombudstypen, som representerar en funktion som ett objekt.
Uppräkningar Beskriver uppräkningstyper, vars värden tillhör en uppsättning namngivna värden.
Attribut Beskriver attribut som används för att ange metadata för en annan typ.
Undantagstyper Beskriver undantag som anger felinformation.