Statische Typisierung
# Statische Typisierung

Statische Typisierung (englisch static typing) bezeichnet ein Schema der Typisierung von Programmiersprachen.

Bei der statischen Typisierung wird im Gegensatz zur dynamischen Typisierung der Datentyp von Variablen und anderen Programmbausteinen schon während der Kompilierung festgelegt. Dies kann durch Typinferenz oder durch explizite Deklaration geschehen. Statische Typisierung kann durch starke Typisierung erweitert werden.

Vorteile:

* Bestimmte Fehler können bereits zur Übersetzungszeit erkannt werden und müssen nicht zur Laufzeit geprüft werden. Damit werden Fehler auch in selten benutzten Programmteilen, die bei Tests oft nicht durchlaufen werden, gefunden.
* Die Effizienz von Programmen wird durch die Reduzierung des Rechenaufwands für Typüberprüfungen zur Laufzeit ebenfalls gesteigert.
* Zahlreiche Optimierungen hängen von den zur Übersetzungszeit vorhandenen Informationen ab. So ermöglicht statische Typisierung zum Beispiel das direkte Einfügen von Maschinencode statt eines Methoden- oder Funktionsaufrufs.

Nachteile:

* Teilweise sind die Typen erst zur Laufzeit bekannt, bei Sprachen mit statischer Typisierung bedeutet dies dann meist einen gewissen Aufwand, da das Typsystem umgangen werden muss.
* Die Compiler sind aufwendiger, weil dort mehr Aufwand für die Analyse anfällt.

## Beispiele

Nach dieser Definition sind beispielsweise die folgenden Sprachen statisch typisiert:

* Java
* Kotlin
* C#
* Eiffel
* Gambas
* Pascal
* ML
* Scala
* D
* OCaml
* Swift
* Rust
* Haskell
* TypeScript

Sprachen wie PHP, Python, Ruby und JavaScript hingegen sind dynamisch typisiert.

## Alternative Definition

Eine alternative Definition des Begriffs statische Typisierung betrachtet Typprüfungen: Eine Sprache ist genau dann statisch typisiert, wenn sie keine dynamischen Typprüfungen, also solche, die zur Laufzeit geschehen, aufweist. Ansonsten nennt man sie dynamisch typisiert. Nach dieser Definition wäre beispielsweise Java dynamisch typisiert.

