Unter einer Zuweisung (englisch assignment) versteht man in einer imperativen Programmiersprache einen Typ von Anweisung (englisch statement), durch den eine Variable einen neuen Wert erhält. In Abgrenzung von anderen Anweisungstypen, die ebenfalls den Wert einer Variablen verändern können (zum Beispiel Aufruf einer Prozedur mit Nebeneffekten), spricht man nur dann von einer Zuweisung, wenn der Zuweisungsoperator der jeweiligen Programmiersprache verwendet wird. Viele Programmiersprachen berücksichtigen hierbei die Zuweisungskompatibilität der beteiligten Ausdrücke und Variablen, um Programmfehler zu vermeiden.
Bevor eine Zuweisung eines Wertes an eine Variable erfolgen kann, ist es in vielen Programmiersprachen erforderlich, diese explizit zu deklarieren. In manchen Programmiersprachen wird dies bei einer Zuweisung an eine noch nicht deklarierte Variable implizit ausgeführt (zum Beispiel in Perl, nicht aber in C++).
Im Folgenden sei v
eine Variable und a
ein Ausdruck (englisch expression). Die Beispiele zeigen einige Notationen in unterschiedlichen Programmiersprachen.
v = a
v := a
set v a
MOVE a TO v
COMPUTE v = a
MAKE "v :a
Die Zuweisung kann in den Fällen, wo sie nur mit einem einfachen Gleichheitszeichen symbolisiert wird, leicht mit dem mathematischen Gleichheitszeichen verwechselt werden. Die seit der Erfindung von FORTRAN häufig in Programmiersprachen zu findende Zuweisung zu einer Variablen mit dem Gleichheitszeichen (zum Beispiel x = y) kann daher leicht zu Irritationen oder Verwechslungen führen: die beiden Zuweisungen x = y (Zuweisung des Wertes der Variablen y zur Variablen x) und y = x (Zuweisung des Wertes der Variablen x zur Variablen y) haben jeweils eine völlig andere Bedeutung als die beiden entsprechenden booleschen Ausdrücke mit relationalen Operatoren (Vergleich auf Gleichheit von x und y), die in beiden Fällen zu einem identischen booleschen Ergebnis führen.[1]
Erschwerend kommt in einigen Programmiersprachen hinzu, dass die Zuweisung in andere Anweisungen integriert werden kann, wenn sie selber als ein Ergebniswert interpretiert werden kann. Die folgenden beiden Beispiele zeigen zwei Varianten einer entsprechenden Programmsequenz in der Programmiersprache C, die beide zu sehr leicht zu übersehenden Programmierfehlern führen kann:
int i = 0;
if (i = 1) {
// Dieser Block wird immer ausgeführt,
// weil die Zuweisung i = 1 immer das numerische Ergebnis 1 hat,
// was als der boolesche Wert "wahr" interpretiert wird.
}
int i = 0;
if (i == 1) {
// Dieser Block wird nie ausgeführt,
// weil die Vergleichsoperation i == 1 immer das numerische Ergebnis 0 hat,
// was als der boolesche Wert "falsch" interpretiert wird.
}
In manchen Programmiersprachen ist es auch möglich, mehrere Zuweisungen innerhalb einer Anweisung zu formulieren. So können etwa auf der linken Seite des Zuweisungs-Operators mehrere Variablen-Namen und auf der rechten Seite mehrere Ausdrücke jeweils durch Kommata getrennt notiert werden.
v1,v2 = a1,a2 Ruby ($v1,$v2) = ($a1,$a2) Perl [v1, v2] = [a1, a2] JavaScript linksseitige Destrukturierung des rechtsseitigen Arrays $v1,$v2 = $a1,$a2 Windows PowerShell (psetf v1 a1 v2 a2) Common Lisp
In Programmiersprachen, die Mehrfachzuweisungen unterstützen, lassen sich mit einem Konstrukt der Form
v1,v2 := v2,v1
die Werte der beiden Variablen v1
und v2
austauschen. Erlaubt eine Sprache keine Mehrfachzuweisungen, dann benötigt man im allgemeinen Fall eine Hilfsvariable, um die Inhalte zweier Variablen auszutauschen; man spricht dann von einem Dreieckstausch.