Schwach, Dynamisch, Stark, Streng, Statisch, hää?
Schaffen wir erst mal Ordnung im Wortewirrwarr und gruppieren die Begriffe:
- Static (Statisch) vs. Dynamic (Dynamisch)
- Strong/Loose (Stark/Streng) vs. Weak (Schwach)
Static/Dynamic Typing
Bei static und dynamic typing (statische und dynamische Typisierung) geht es um die Frage...
Wann stehen die Datentypen im Quellcode fest?
Bei den meisten Programmiersprache (nicht so beim Gros der Skriptsprachen) erhält jede Variable bei der Deklaration einen festen Datentyp zugeordnet. So steht bereits bei der Kompilierung des Quellcodes fest, welcher Datentyp wo verwendet wird. Das nennt sich dann statisch-typisiert und hat zur Folge, dass fehlerhafter Quellcode (auf Typsicherheit bezogen) gar nicht erst kompiliert werden kann.
// C int zahl;
Bei einer dynamisch-typisierten Programmier-, bzw. meist Skriptsprache, wiederum, stehen die Datentypen erst zur Laufzeit fest. Variablen haben also bei der Deklaration keinen festen Datentyp.
// PHP $zahl;
Strong/Weak Typing
Bei strong und weak typing (starke/strenge und schwache Typisierung) geht es um die Frage...
Wie stark unterscheidet eine Programmiersprache die Datentypen?
Und da seht ihr auch schon das Problem dieser Frage: Es gibt keine allgemeingültige Skala, die man einfach so anwenden könnte, um die Frage zu beantworten.
Wird eine Sprache als schwach-typisiert bezeichnet, ist diese Aussage einigermassen nachvollziehbar; die Sprache unterscheidet die Datentypen halt kaum. Die Skala nach unten ist klar definiert.
Andererseits eine Sprache als stark-typisiert zu bezeichnen ist eine sehr relative Aussage: Die Skala nach oben hat kein definiertes Ende. So gibt es z.B. auch viele statisch-typisierte Programmiersprachen, die aber Type-Casting (Typumwandlung) erlauben. Also das Umformen eines Wertes von einem Datentyp in einen anderen. Zum Beispiel in C geschieht dies teilweise sogar implizit (automatisch vom Compiler).
int a = 2; short int b = 4; // b wird zur Addition nach 'int' gecastet int c = a + b;
Merkmale von stark-typisierten Sprachen
Ein Sprache gilt als eher (das Zauberwort) stark-typisiert, wenn sie möglichst viele der folgenden Eigenschaften aufweist:
- Möglichst grosses Wissen darüber, was zur Laufzeit geschehen wird
- Keine Möglichkeiten das Typsystem zu umgehen. Zum Beispiel durch das direkte Verändern von Werten im Speicher.
- Kein implizites Type-Casting durch den Profiler/Interpreter. Der Programmierer muss Type-Casts explizit angeben
- Objekte (Klasseninstanzen) können ihren Typ nicht ändern
- Möglichst hohe Type-Safety (Typsicherheit). Also möglichst hohe Verhinderung von Typverletzungen zur Laufzeit.
- Beim Auftreten von Fehlern bei Typvergleichen folgen klar definierte Aktionen (Fehler, Exceptions/Ausnahmen, etc.)
Sprachen die als eher stark-typisiert bezeichnet werden sind z.B. Haskell, Lisp oder Java.




