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-parameter generic-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-argument generic-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> |
Närliggande information
Ä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. |