Ein Typsystem ist die Menge der Regeln einer Programmiersprache, die festlegen, welche Datentypen Werte haben dürfen und welche Operationen auf ihnen erlaubt sind. Es entscheidet, ob ein Programm schon beim Kompilieren oder erst zur Laufzeit erkennt, dass eine Variable falsch verwendet wird.
Statische und dynamische Typisierung
Bei der statischen Typisierung steht der Typ jeder Variablen bereits beim Kompilieren fest. Sprachen wie Java, C# oder Go prüfen Typfehler daher schon vor dem Start des Programms:
// Java: Typ muss angegeben werden
int zahl = 5;
zahl = "Text"; // Compiler-Fehler
Bei der dynamischen Typisierung wird der Typ erst zur Laufzeit bestimmt. Python oder JavaScript erlauben es, einer Variable nacheinander Werte verschiedener Typen zuzuweisen:
# Python: Typ wird zur Laufzeit ermittelt
zahl = 5
zahl = "Text" # erlaubt
Starke und schwache Typisierung
Eine Sprache ist stark typisiert, wenn sie Typen nicht stillschweigend verrechnet. Python lehnt zum Beispiel "5" + 5 ab. Schwach typisiert heißt, dass die Sprache automatisch konvertiert — JavaScript wandelt "5" + 5 in den String "55" um.
Typinferenz
Viele moderne Sprachen wie Go, Rust oder TypeScript leiten den Typ aus dem Kontext ab, ohne dass man ihn hinschreiben muss:
// Go: Typ wird aus dem Wert abgeleitet
zahl := 5
Das Typsystem arbeitet dabei eng mit anderen Grundkonzepten zusammen: Boolean, String, Konstante und Operator. Eine Gegenbewegung zum starren Typsystem ist die dynamische Auswertung durch einen Interpreter.
Verwandte Grundlagen: Python-Befehle, TypeScript-Befehle, Java-Befehle, Go-Befehle, Rust-Befehle.