Einführung in die Zuweisung im Rahmen der Lehre des Programmierens. [] (zuweisen, Zuweisungen), Lektion, Seite 721535
http://www.purl.org/stefan_ram/pub/programmieren_zuweisung_de ist die kanonische URI dieser Seite.
Stefan Ram

Zuweisungen

Eine Zuweisung  ist ein Sprachelement, dessen Wirkung das Schreiben eines Wertes in einen Wertspeicher ist. Man sagt auch der Wert werde dem Wertspeicher zugewiesen. Damit geht einher, daß der Wertspeicher keine Information mehr über seinen vorherigen Wert enthält (selbst, wenn der zugewiesene Wert dem vorherigen Wert gleich ist).

Die Möglichkeit der Verwendung einer Zuweisung zur Veränderung des Wertes eines Wertspeichers ist der entscheidende Unterschied  der Wertspeicher zu den Konstanten  (benannten Werten): Der Wert einer Konstante wird einmal bei ihrer Deklaration festgelegt und kann danach nicht mehr verändert werden.

Eine Zuweisung wird allgemein so formuliert, daß der Angabe eines Wertspeichers ein nach links weisender Pfeil und ein Ausdruck nachgestellt wird.

v ← 32

Die Wirkung der Zuweisung besteht dann darin, daß der neue Wert des Wertspeichers der in den Typ des Wertspeichers gewandelte Wert des Ausdrucks ist, falls solch eine Wandlung möglich ist.

Der erste ASCII  von 1963 enthielt sogar solch einen nach links weisenden Pfeil, aber spätere Versionen des ASCII  enthielten keinen solchen Pfeil mehr. Vielleicht liegt es an der geringen Verfügbarkeit dieses Zeichens im 20. Jahrhundert, daß viele Programmiersprachen diese schöne Schreibweise für die Zuweisung so nicht direkt verwenden. Trotzdem kann es aber hilfreich sein, sich eine Zuweisung in dieser Weise vorzustellen.

Tatsächlich verwenden viele Programmiersprachen anstelle des Pfeiles das Gleichheitszeichen "=" oder das Definitionszeichen ":=" in einer Hintereinanderschreibung aus einem Doppelpunkt und einem Gleichheitszeichen.

Diese Schreibweisen einer Zuweisung erinnern auch an eine mathematische Gleichung oder Definition. Doch eine Zuweisung ist etwas anderes.

Die mathematischen Gleichung x  = z “ ist die Notation der Aussage, daß der Wert „x “ dem Wert „z “ gleicht. Je nach Redezusammenhang wird diese Aussage entweder als wahr postuliert oder als eine Aussage verwendet, die wahr oder falsch sein kann.

Eine Zuweisung  "x = z" ist aber keine Aussage, sondern die Anweisung für eine Aktion, mit dem Ziel eine bestimmte Veränderung zu bewirken.

Die mathematischen Definitionen x  := 1. x  := 2.“ wären ein Verstoß gegen die Regeln einer verständlichen mathematischen Schreibweise. Denn in der Mathematik kann ein Bezeichner innerhalb eines Kontexts (Text-Zusammenhangs) nur einmal  definiert werden. Man wüßte nicht, ob die mathematische Variable „x “ nun gleich 1 oder gleich 2 sein soll.

Die Folge von Zuweisungen  "x = 1; x = 2; " sind in einer prozeduralen Programmiersprache aber so vollkommen sinnvoll. Hier kommt nämlich der Wertspeicher-Begriff und damit der Zeitbegriff ins Spiel, den es so in der Mathematik nicht gibt: Der Wertspeicher "x" wird eben zuerst  auf den Wert "1" gesetzt und danach  auf den Wert "2", ohne daß hierdurch ein Widerspruch entsteht.

In manchen Programmiersprachen wird versucht, den Unterschied einer Zuweisung zu ähnlichen Schreibweisen aus der Mathematik deutlich zu machen, so werden in BASIC  Zuweisungen durch das vorangestellte Schlüsselwort "LET" gekennzeichnet.

Interpretation der Zuweisung

Der Einfachheit halber wird nun angenommen, der Wertspeicher "v" und der Wertspeicher "w" hätten beide denselben Typ. Dann bewirkt die Zuweisung "v = w", daß der Wert des Wertspeichers "w" in den Wertspeicher "v" geschrieben (kopiert) wird.

Bei der Zuweisung "v = w" steht der Name des Wertspeichers auf der linken Seite für den Wertspeicher  "v" selber, der Name des Wertspeichers auf der rechten Seite aber für den Wert  des Wertspeichers "w".

In manchen Programmiersprachen wird dieser Sachverhalt auch ausgedrückt, indem man sagt der Wertspeicher "v" sei ein „Linkswert“ (L-value ) oder habe einen „Linkswert“. Ein „Linkswert“ ist etwas, das sinnvollerweise auf der linken Seite einer Zuweisung stehen kann, also etwas, das einen Wertspeicher bezeichnet. Umgekehrt ausgedrückt ergibt das dann die Regel „Auf der linken Seite einer Zuweisung muß ein Linkswert stehen.“ (In C  und C++  ist die Bezeichnung „Linkswert“ üblich, während man in Java  hier von einer „Variablen“ spricht.)

Der Wertspeicher "w" wird in der Zuweisung "v = w" als „Rechtswert“ (R-value ) verwendet, das heißt, daß sein Wert  verwendet wird.

Würde der Name auf beiden Seiten für den Wert  der Wertspeicher stehen und hätte der Wertspeicher "v" vor der Zuweisung den Wert "12" und der Wertspeicher "w" vor der Zuweisung den Wert "9", so ergäbe sich nämlich die Zuweisung "12 = 9", was offensichtlich keinen Sinn ergibt. Dies wird manchmal auch ausgedrückt, indem man sagt der Wert "12" sei kein  Linkswert, er kann also nicht  sinnvollerweise auf der linken  Seite einer Zuweisung stehen. Auf der linken Seite der Zuweisung muß eben ein Wertspeicher  stehen. Berücksichtigt man aber, daß der Name des Wertspeichers auf der linken Seite für den Wertspeicher  "v" steht, so erhält man hingegen die sinnvolle Zuweisung "v = 9".

Bei einer Zuweisung wie "x = 1 + 2" erfolgen zwei  Schritte entgegen  der Leserichtung: Zuerst  wird der Wert des rechts vom Gleichheitszeichen stehenden Ausdrucks "1 + 2" ermittelt und dann  wird dieser dem links stehenden Objekt als Wert zugewiesen.

Schritte bei der Zuweisung
  2. Schritt: Zuweisung des Wertes an das 
durch die linke Seite bestimmte Objekt 
.-----------. 
| |  
| .---+---. 1. Schritt: Auswertung 
v ^ ^ der rechten Seite 
x = 1 + 2

Löschen eines Wertspeichers

Laien haben oft die irrige Vorstellung, ein numerischer Wertspeicher sei „gelöscht“, wenn man diesem den Wert "0" zugewiesen habe. Doch tatsächlich hat der Wert "0" keine besondere Bedeutung. Man könnte also genauso gut sagen, ein Wertspeicher sei „gelöscht“, wenn man ihm den Wert "22" zugewiesen habe. Aber einen Wertspeicher, der unzweifelhaft einen bestimmten Wert, wie den Wert "22" oder den Wert "0", speichert als „gelöscht“ zu bezeichnen, erscheint als unpassend.

Tatsächlich ist es richtig zu sagen, daß mit jeder Zuweisung  an einen Wertspeicher, der vorherige Wert gelöscht wird. Eine Wertspeicher ist  also nie gelöscht, aber eine bestimmte Information, die früher  einmal in einem Wertspeicher war, kann inzwischen gelöscht worden sein. Will man also den derzeitigen Wert eines Wertspeichers löschen, so kann dies dadurch erfolgen, daß man dem Wertspeicher einen beliebigen neuen Wert zuweist, aus dem kein Rückschluß mehr auf den vorherigen Wert gezogen werden kann.

Von der Stefan-Ram-Startseite ausgehend finden sich oft noch mehr Informationen zu Themen, die auf einer Seite angesprochen wurden. (Eine Verbindung zur Stefan-Ram-Startseite befindet sich ganz oben auf dieser Seite.)  |   Seiteninformation und Impressum  |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. slrprd, PbclevtugFgrsnaEnz