Typdeklarationer
Q# stöder användardefinierade typer. Användardefinierade typer liknar posttyper i F#; de är oföränderliga men har stöd för en copy-and-update-konstruktion .
Användardefinierade typer
Användardefinierade typer kan innehålla både namngivna och anonyma objekt.
Följande deklaration inom ett namnområde definierar till exempel en typ Complex
som har två namngivna objekt Real
och Imaginary
, båda av typen Double
:
newtype Complex = (Real: Double, Imaginary : Double);
Alla kombinationer av namngivna och namnlösa objekt stöds, och inre objekt kan också namnges.
Till exempel typen Nested
, definierad som
newtype Nested = (Double, (ItemName : Int, String));
innehåller två anonyma objekt av typen Double
respektive String
ett namngivet objekt ItemName
av typen Int
.
Du kan komma åt de inneslutna objekten via deras namn eller genom dekonstruktion (mer information finns i objektåtkomst). Du kan också komma åt en tuppla av alla objekt där formen matchar den som definierats i deklarationen via unwrap-operatorn.
Användardefinierade typer är användbara av två skäl. För det första, så länge de bibliotek och program som använder de definierade typerna kommer åt objekt via deras namn i stället för genom dekonstruktion, kan typen utökas till att innehålla ytterligare objekt senare utan att någon bibliotekskod bryts. Därför rekommenderas det vanligtvis inte att komma åt objekt via dekonstruktion.
Q# För det andra kan du förmedla avsikten och förväntningarna för en viss datatyp eftersom det inte finns någon automatisk konvertering mellan värden för två användardefinierade typer, även om deras objekttyper är identiska.
Användardefinierade konstruktorer
Konstruktorer för användardefinierade typer genereras automatiskt av kompilatorn. För närvarande går det inte att definiera en anpassad konstruktor, även om detta kan vara ett tillägg till språket i framtiden.