WikiDer > Typinferenz

Type-inferentie

In dem Informatik bezeichnet Typ-Inferenz (Englisch: Typinferenz), oder implizite Charakterisierung, auf die Möglichkeit von einigen Programmiersprachen automatisch Datentyp von a Ausdruck zu entscheiden. Eine Programmiersprache, die Typinferenz unterstützt, kann die Typen bestimmter Ausdrücke in einem Programm selbst bestimmen, sodass der Programmierer sie nicht mehr angeben muss. Die meisten funktionale Programmiersprachen unterstützen Typinferenz, aber auch einige Sprachen, die nicht funktionsfähig sind (aber stark und statischtypisiert are) Typinferenz liefern.

Der Vorteil der Typinferenz besteht darin, dass der Programmierer nicht verpflichtet ist, alle Typen explizit zu deklarieren, während gleichzeitig ein hohes Maß an "Typsicherheit" (Verhinderung und Erkennung von Tippfehlern) möglich bleibt.

Die Ableitung der Typen aller Ausdrücke in einem Programm erfolgt während der kompilieren (Kompilierzeit). Das Compiler bestimmt die Typen der zusammengesetzten Ausdrücke basierend auf den zusammengesetzten Ausdrücken. Das Typsignaturen der vom Benutzer definierten Funktionen wird durch die Verwendung der Parameter in den Funktionsdefinitionen, da auf diese Weise der Typ aller verwendeten Variablen und definiert Funktionen vom Compiler bestimmt werden können, können Typdeklarationen oft ganz weggelassen werden.

Der Unterschied zu dynamisches Tippen besteht darin, dass die Typinferenz zur Kompilierzeit erfolgt, bevor das Programm ausgeführt wird, während bei der dynamischen Typisierung die Typbestimmung während der Programmausführung stattfindet.

Einige Beispiele für Programmiersprachen, die Typinferenz mehr oder weniger unterstützen, sind Haskell, OCamli, F#, vala, Reichweite und neuere Versionen von C , C# und Java.

Beispiel

Nimm das nächste Fragment auf Pseudocode:

Funktionf(ein){b=ein%2;Rückkehrb;}X=f(4);druckenX;

Da der Parameter ein Als Operand der Modulo-Operation wird der Typ von verwendet einint.[1] Das Ergebnis einer Modulo-Operation ist ebenfalls eine ganze Zahl, daher ist der Typ von b ist auch int. Und damit ist der Rückgabeausdruck von is f() vom Typ int. Die Typensignatur von f ist deshalb int -> int. Denn das weiß der Compiler jetzt f() ein int zurückkehrt, weiß er, dass der Typ des Ausdrucks f(4) ebenfalls int ist. Und damit die Art der Variablen X ebenfalls int.

Der Compiler kennt jetzt die Typen aller lokalen Variablen (ein und b), aller globalen Variablen (X) und alle deklarierten Funktionen (f()). Es gibt keine Tippfehler und das Programm kann kompiliert werden.

In einer Sprache ohne Typrückschluss, in der alle Typen deklariert werden müssen, könnte der obige Pseudocode etwa so aussehen:

Funktionf(intein):int{intb=ein%2;Rückkehrb;}intX=f(4);druckenX;

Siehe auch