Alle Programmiersprachen ermöglichen die direkte oder indirekte Manipulation von Werten . Im Allgemeinen erfolgt dies über Variablen , die eine Assoziation (wir sagen auch eine Verknüpfung) zwischen einem Symbol und einem Wert oder einer Folge von Werten darstellen. Das Symbol ermöglicht es dem Programmierer, diese Werte zu identifizieren und zu bearbeiten.
Die Typisierung einer Variablen besteht darin, ihrer symbolischen Variablen einen "Datentyp" zuzuordnen, der es dem Computer ermöglicht, zu wissen, ob dieser vom numerischen Typ, Text usw. ist, um Speicherbereiche entsprechend zuzuweisen, die ausreichend groß sind, um diese Daten zu speichern und möglicherweise um zu überprüfen, ob die für diese Variable programmierten Operationen (mathematische Operationen, Textverarbeitung usw.) mit ihrem Typ übereinstimmen.
Die dynamische Eingabe besteht darin, den Computer die Eingabe während der Ausführung des Codes "on the fly" ausführen zu lassen, im Gegensatz zu statisch typisierten Sprachen, in denen die Art der Analyse vorgelagert erfolgt (normalerweise während der Kompilierung aus dem Programm). Unabhängig davon, wann diese Analyse durchgeführt wird, kann die Typisierungsmethode entweder explizite Typanmerkungen für die Ausdrücke im Programm erzwingen oder über einen Typinferenzmechanismus verfügen. Beachten Sie, dass die meisten dynamisch typisierten Sprachen über diesen Mechanismus verfügen.
Die dynamische Typisierung kann eine sehr bequeme Lösung für die schnelle Entwicklung von Programmen sein, insbesondere wenn der Typ der manipulierten Objekte nicht unbedingt im Voraus bekannt ist oder wenn der Programmierer die Änderung des Typs einer Variablen der Einfachheit halber ermöglichen möchte. Es ist auch für die Entwicklung eines Metaobjektprotokolls (MOP) erforderlich, bei dem statische Typisierung verboten ist .
Beispiel: In C oder C ++ das folgende Programm-Snippet:
int a; a = 5; int b = a + 1;definiert eine mit 'a' bezeichnete Variable vom Typ Integer (' int') und weist ihr dann den Wert 5 zu. Dann wird eine Variable b desselben Typs definiert und gleichzeitig durch das Ergebnis des Ausdrucks initialisiert a + 1. C ++ ist eine statisch typisierte Sprache . In modernem C ++ (nach C ++ 11 ) autoerlaubt das Schlüsselwort , den Typ bestimmter Variablen nicht zu deklarieren. Der Typ der Variablen muss dann vom Compiler durch Kontextanalyse abgeleitet werden.
int a = 1; auto b = a + 1;In Common Lisp werden wir schreiben:
(let ((a 5)) ...)Hier erfolgt die Erstellung einer lexikalischen Variablen ohne Angabe ihres Typs. Der Datentyp ist nicht mit dem Symbol verknüpft, das die Variable kennzeichnet, sondern in den Daten selbst codiert. Im Rahmen des 'let' können wir also den Typ der Variablen a abfragen (es ist eine Anwendung der Reflexivität ):
(let ((a 5)) (when (numberp a) (print "a est un nombre")) ...)Außerdem kann 'a' während der Ausführung ein Objekt eines anderen Typs empfangen, wenn das Programm dies zulässt:
(let ((a 5) (setf a "je suis une chaîne") ...)Die große Flexibilität, die das dynamische Schreiben ermöglicht, wird im Allgemeinen bezahlt durch:
Für teure algorithmische Operationen können Skriptsprachen wie Python , Tcl oder Ruby mit Bibliotheken verbunden werden, die in einer einfachen Sprache wie der C-Sprache geschrieben sind . Darüber hinaus erlauben einige Sprachen (insbesondere Common Lisp ) eine optionale statische Deklaration des Typs, um die Konsistenz der Typisierung beim Kompilieren zu beweisen und die Indirektionen zu entfernen.
Wenn eine Funktion zur Laufzeit Daten eines falschen Typs empfängt (Typfehler zur Laufzeit), wird eine Ausnahme ausgelöst.