Kapitel 2: Grundlagen / 2.1 Variablen und Konstanten / 2.1.4 Type Inference

Swift verfügt über die Fähigkeit, zur Compilezeit auf den Datentyp einer Variable oder Konstante zu schließen (infer), ihn zu inferieren. Daher ist es oftmals nicht nötig, bei einer Variablen- oder Konstantendeklaration den Typ explizit anzugeben:

var anzahlDerBekanntenProgrammiersprachen = 2
var nameDesSchülers = "Benjamin"
var isThisEasyToRead = true
let π = 3.14159

Es werden Zahlen ohne Nachkommastellen als Int inferiert, Zeichenketten als String, die Schlüsselwörter true und false als Bool, eine Zahl mit Nachkommastellen als Double usw.

Ist die Ausgangssitiation komplizierter, wählt Swift den Datentyp, der dem Inference-Algorithmus sinnvoll erscheint:

var additionsergebnis = 2 + 2.3

In dieser Zeile findet rechts vom Gleichheitszeichen eine Addition statt. Der Inference-Algorithmus erkennt, vereinfacht gesprochen, dass es sich um ein Int und ein Double handelt, die hier addiert werden sollen. Er hat nun zwei Möglichkeiten: Er wandelt die 2 (Int) in eine 2.0 (Double) um, addiert dann die beiden Werte zu einem Double mit dem Wert 4.3 und speichert den in der Variablen. Oder er wandelt die 2.3 (Double) in eine 2 (Int) um, addiert dann die beiden Werte zu einem Int mit dem Wert 4 und speichert den in der Variablen.

Tatsächlich wählt der Algorithmus den ersten Weg: die Variable additionsergebnis ist vom Typ Double und enthält den Wert 4.3.

Vermutlich tut der Algorithmus das, weil so kein Datenverlust durch das Runden entsteht. Bisher ist das genaue Vorgehen des Inference-Algorithmus durch Apple allerdings nicht beschrieben, so dass man Type Inference im Zweifel einfach ausprobieren muss.

In der Praxis macht Type Inference immer dann Sinn, wenn der von Swift ausgewählte Typ dem vom Programmierer gewünschten Typ entspricht und außerdem für fremde Leser des Codes gut erkennbar ist, welche Variable oder Konstante welchen Typ hat. Tatsächlich deckt Type Inference in diesem Sinne etwa 90% aller Fälle sehr gut ab.

Kapitel 2.1.4: Type Inference

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.