WikiDer > Enteneingabe
Ente tippen ist ein Begriff aus dem Informatik mit der eine bestimmte Eigenschaft des Typsystem von a Programmiersprache angegeben ist. In einer Duck-Typing-Programmiersprache ist es möglich Objekte indem Sie diesen Objekten neue Methoden oder Attribute hinzufügen.
Wenn es wie eine Ente läuft...
Der Begriff "Enten-Typisierung" leitet sich von dem (nicht-rechenbaren) Ausdruck ab "Wenn es wie eine Ente läuft und wie eine Ente quakt, ist es eine Ente." (Wenn es wie eine Ente läuft und wie eine Ente quakt, ist es eine Ente). Dies weist darauf hin, dass eine Enten-Typing-Programmiersprache nicht auf die Klasse von einem Objekt, um zu sehen, was dieses Objekt "kann", sondern zum Objekt selbst.
Ohne Enteneingabe
Angenommen, wir haben den folgenden Codeausschnitt in einer Sprache ohne Duck-Typing:
Buchstaben = newArray(); // ein mit Buchstaben und Zahlen gefülltes Array = new Array(); // ein mit Zahlen gefülltes Array
Buchstaben1 = ['a', 'f', 'g']; Ziffern1 = [1, 5, 8];
Jetzt wäre es nützlich, wenn Zahlen1 ein Methodegesamt hatte, das ist die Summe der im Array gespeicherte Ziffern. In einer Sprache ohne Duck-Typing kann dies nur durch Erstellen einer neuen Klasse erfolgen, die von der Klasse abgeleitet ist Array mit einer neuen Methode:
class Digits erweitert Array { int total() { // die Summe berechnen und zurückgeben } }
Buchstaben = newArray(); // ein mit Buchstaben gefülltes Array Zahlen = new Numbers(); // ein mit Zahlen gefülltes ArrayMit Ententypisierung
In einer Duck-Typing-Sprache ist das Hinzufügen einer zusätzlichen Klasse nicht erforderlich, um Objekten eine neue Methode zu geben. Stattdessen geben wir dem Objekt einfach die zusätzliche Methode:
Buchstaben = newArray(); // ein mit Buchstaben und Zahlen gefülltes Array = new Array(); // ein mit Zahlen gefülltes Array digits.total = function() { // die Summe berechnen und zurückgeben };Typprüfung
Der Grund, warum dies möglich ist, hat mit der Art und Weise zu tun, wie eine Sprache Typprüfung (Überprüfung der Typen in den verschiedenen Operationen) erfolgt. Nehmen Sie den folgenden Ausschnitt (eine Fortsetzung des obigen Beispiels):
drucke zahlen.total(); // Buchstaben richtig ausgeben.total(); // falsch!
In einer Sprache ohne Enten-Schreiben, die Compiler die Klasse eines Objekts, um zu prüfen, ob eine bestimmte Operation an einem Objekt möglich ist. Die erste Zeile des Beispiels stellt kein Problem dar: Zahlen ist ein Objekt der Klasse Zahlen. Diese Klasse hat eine Methode gesamt() und somit gibt es kein problem. In der zweiten Zeile prüft der Compiler, welche Klasse Briefe ist ein Objekt. Das ist die Klasse Array, die keine Methode gesamt() hast. Im Moment gibt es ein Tippfehler und die Kompilierung stoppt.
Typprüfung mit Ententypisierung
In einer Duck-Typing-Sprache betrachtet der Compiler nicht die Klasse des Objekts, sondern das Objekt selbst. Wenn der Compiler das obige Fragment überprüft, weiß der Compiler nicht, ob es Zahlen-Objekt einer Methode gesamt() hast. Immerhin kann dies an einer früheren Stelle im Programm dem Objekt hinzugefügt worden sein! Das ist jetzt kein Problem Zahlen-Objekt: Wir geben dem tatsächlich eine zusätzliche Methode gesamt(). Wenn der Compiler die folgende Zeile überprüft, weiß er auch nicht, ob es Briefe-Objekt einer Methode gesamt() hast. Somit wird auch diese Zeile vom Compiler fehlerfrei übernommen: Das Übersetzen des Fragments läuft ohne Probleme.
Wenn das Programm ausgeführt wird, ist das Ergebnis Gut eine Fehlermeldung. Nach der Regel drucke letter.total(); angekommen, sucht das Programm vergeblich nach einer Methode gesamt() von dem Briefe-Objekt. EIN Laufzeit Fehler ist das Ergebnis.
Vor-und Nachteile
Ein wichtiger Unterschied zwischen einer Sprache ohne Duck-Typing und einer Sprache mit Duck-Typing besteht also darin, dass erstere mehr Fehler durch Typprüfung, also zur Kompilierzeit. Dadurch werden Fehler schneller entdeckt und Programme sicherer. Beim Duck-Typing treten Fehler nur während des Programmlaufs auf, und nicht unbedingt bei jeder Ausführung des Programms: Es müssen zusätzliche Tests durchgeführt werden.
Auf der anderen Seite hat der Programmierer mehr Freiheit und eine Duck-Typing-Sprache ist ausdrucksvoller. Programme sind oft kürzer und haben weniger "Haushaltscode".
Bemerkungen
- Aus der Funktionsweise von Duck-Typing folgt auch, dass Duck-Typing-Sprachen immer schwach typisiert und immer bis zu einem gewissen Grad (oder überhaupt) dynamisch typisiert werden.
- Zusätzlich zum Hinzufügen von Methoden kann Duck-Typing auch Methoden aus Objekten entfernen. Es ist auch möglich anstelle von Methoden Attribute zu einem Objekt hinzufügen.
- Beispiele für Enten-Typing-Sprachen sind Javascript, Python, Smalltalk, Pfeil und Rubin.