Typsystem

Typsystem
Allmänt
Huvudkategorier
  • Statisk mot Dynamisk
  • Manifest mot Inferens
  • Nominell mot Strukturella
Övriga kategorier
  • Beroende
  • Flödeskänslig
  • Gradvis
  • Snitt
  • Latent
  • Förfinande
  • Substrukturell
  • Unik
Se även
  • Stark och svag typing
v  r
Den här artikeln behöver källhänvisningar för att kunna verifieras. (2020-12)
Åtgärda genom att lägga till pålitliga källor (gärna som fotnoter). Uppgifter utan källhänvisning kan ifrågasättas och tas bort utan att det behöver diskuteras på diskussionssidan.

Ett typsystem definierar inom datavetenskapen hur ett programspråk klassificerar värden och uttryck som typer, hur det kan manipulera dessa och hur de kan interagera med varandra.

Typkontroll

Processen där typerna kontrolleras, typkoll, kan äga rum under kompileringen (statisk kontroll) eller vid exekveringen (dynamisk kontroll). Om språkets specifikation kräver strikta regler om typning (dvs. mer eller mindre tillåter konverteringar mellan typer som inte förlorar information), kan man kallas starkt typspråk (alternativt svagt).

Statisk typning

Ett programspråk sägs ha statisk typning när en variabel tilldelas en datatyp vid kompilering och sedan behåller den under resten av programmets livslängd. Språk som C, C++, Java och Pascal är statiskt typade. Statisk typning gör det möjligt att tidigt upptäcka eventuella fel samtidigt som det tillåter effektiv exekvering (dvs. snabb eller reducerad minnesanvändning). Exempel på statisk typning i C# eller Java:

/* Deklarerar en variabel av typen int (heltal)
   och initierar den med 2 */
int e = 2;

/* Deklarerar en variabel av typen string (textsträng)
   som tilldelas texten "Hej" */
string str = "Hej";

/* Dessa variabler behåller sina typer under hela körningen.
   Följande operation är inte tillåten. */
string str = true; // Värdet true (boolean: sant eller falskt)

Dynamisk typning

Dynamiskt typade variabler kan referera till vilken datatyp som helst. Exempel på dynamisk typning i PHP:

/* Deklarerar en variabel och tilldelar den ett värde av typen int (heltal) */
$e = 256;

/* Tilldelar ett nytt värde till variabeln. Denna gången ett värde av typen bool. */
$e = true;