Kapitel 3: Einfache Operatoren / 3.1 Operatoren in Swift

Der Zuweisungsoperator (a = b) initialisiert oder aktualisiert den Wert von a auf den Wert von b.

Dieser Operator ist Ihnen sicher schon gut bekannt, da mit Hilfe dieses Operators Variablen und Konstanten deklariert und im Wert verändert werden können:

var a = 100
let b = 200
a = b
// a hat jetzt den Wert 200

Nicht viel neues also, nur eben jetzt aus der Perspektive des Operators. Sie wissen auch bereits, dass anstelle eines Einzelwertes auch ein Tupel zugewiesen werden kann:

let (a, b) = (1, 2)
// a hat jetzt den Wert 1 und b den Wert 2

Eine Besonderheit des Zuweisungsoperators in Swift ist, dass er keinen Rückgabewert hat.

Warum sollte der Zuweisungsoperator einen Rückgabewert haben, fragen Sie sich jetzt vielleicht. Apple hat sich diese Frage auch gestellt, keine zufriedenstellende Antwort gefunden und den Rückgabewert weggelassen.

Andere Sprachen machen das anders. So gibt zum Beispiel die Sprache C, die für die Swift Operatoren immerhin Pate gestanden hat, bei einer Zuweisung den Wert der Zuweisung zurück. Dies hat den Vorteil, dass so Zuweisungsketten (a = b = c) möglich werden:

In C wird so eine Zuweisungskette von rechts ausgeführt, d.h. zuerst bekommt b den Wert von c zugewiesen. Der Rückgabewert ist der Wert von c. Dann wird a dieser Rückgabewert zugewiesen. Am Ende haben a, b und c alle den Wert, den ursprünglich c hatte.

In Swift sind solche Zuweisungsketten also nicht möglich. Das ist aber nicht der schlechten Lobby von Zuweisungsketten geschuldet, sondern ein Seiteneffekt. Denn viel wichtiger ist, dass folgende Konstruktion nicht mehr funktioniert:

if (a = b) {
  // dies führt in Swift zu einem Compilefehler
}

Nehmen Sie einmal an, a und b wären Booleans. b wäre true und a wäre false. Dann würde bei dieser Zuweisung a den Wert von b bekommen, es wären also a und b true, und nehmen Sie weiter an, der Rückgabewert dieser Zuweisung wäre true. Das if prüft nun, ob der nachfolgende Ausdruck true oder false ist. Da er true zurückliefert, also true ist, wird der Code in den geschweiften Klammern ausgeführt.

Schaut man sich den Code aber an, hatte der Programmierer wahrscheinlich etwas ganz anderes im Sinn: Vermutlich wollte er die Variablen a und b auf Gleichheit prüfen und bei Gleichheit den Code in den gescheiften Klammern ausführen. Nicht nur dass bei unserer Annahme a und b nicht gleich sind und dennoch der optionale Code ausgeführt wird, zudem findet noch eine unbeabsichtigte Zuweisung statt.

Der Programmierer hätte statt = den Vergleichsoperator == verwenden müssen, um auf Gleichheit zu prüfen. Um diesen wirklich sehr häufigen Programmierfehler zu unterbinden, darum also, hat Apple auf einen Rückgabewert von Zuweisungen verzichtet. Gute Entscheidung.

Beitragsbild: Martinet noir Apus apus Common Swift von Sébastien Bertru in abgewandelter Form (CC BY-SA 2.0)

Kapitel 3.2: Der Zuweisungsoperator

Schreibe einen Kommentar

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