Siehe auch: Freie Variablen und gebundene Variablen

Der Gültigkeitsbereich einer Variable beschreibt, wo im Text eines Programms die Variable verwendet werden kann, während der Umfang (oder die Lebensdauer) beschreibt, wann in der Ausführung eines Programms eine Variable einen (sinnvollen) Wert hat. Der Geltungsbereich einer Variablen ist eigentlich eine Eigenschaft des Variablennamens, und der Umfang ist eine Eigenschaft der Variablen selbst. Dies ist nicht zu verwechseln mit dem Kontext (auch Umgebung genannt), der eine Eigenschaft des Programms ist und je nach Punkt im Quellcode oder in der Ausführung variiert – siehe Umfang: ein Überblick. Außerdem kann die Lebensdauer eines Objekts mit der Lebensdauer einer Variablen übereinstimmen, ist aber in vielen Fällen nicht an die Lebensdauer der Variablen gebunden.

Der Gültigkeitsbereich eines Variablennamens beeinflusst seine Ausdehnung.

Der Gültigkeitsbereich ist ein wichtiger Teil der Namensauflösung einer Variablen. Die meisten Sprachen definieren für jede Variable (wie auch für jede andere benannte Entität) einen bestimmten Gültigkeitsbereich, der innerhalb eines bestimmten Programms unterschiedlich sein kann. Der Gültigkeitsbereich einer Variablen ist der Teil des Programmcodes, für den der Variablenname eine Bedeutung hat und für den die Variable „sichtbar“ sein soll. Mit dem Eintritt in diesen Bereich beginnt in der Regel die Lebensdauer einer Variablen (wenn sie in den Kontext kommt) und mit dem Verlassen dieses Bereichs endet ihre Lebensdauer (wenn sie aus dem Kontext geht). Eine Variable mit „lexikalischem Geltungsbereich“ ist beispielsweise nur innerhalb einer bestimmten Funktion/eines bestimmten Unterprogramms oder genauer gesagt innerhalb eines Blocks von Ausdrücken/Anweisungen (entsprechend mit Funktions- oder Block-Geltungsbereich) von Bedeutung; dies ist eine statische Auflösung, die zur Parse- oder Kompilierzeit durchgeführt werden kann. Alternativ dazu wird eine Variable mit dynamischem Geltungsbereich zur Laufzeit aufgelöst, und zwar auf der Grundlage eines globalen Bindungsstapels, der vom spezifischen Kontrollfluss abhängt. Variablen, die nur innerhalb einer bestimmten Funktion zugänglich sind, werden als „lokale Variablen“ bezeichnet. Eine „globale Variable“ oder eine Variable mit unbestimmtem Geltungsbereich kann überall im Programm referenziert werden.

Extent hingegen ist ein (dynamischer) Laufzeitaspekt einer Variablen. Jede Bindung einer Variablen an einen Wert kann zur Laufzeit einen eigenen Umfang haben. Der Umfang der Bindung ist der Teil der Ausführungszeit des Programms, in dem die Variable weiterhin auf denselben Wert oder Speicherplatz verweist. Ein laufendes Programm kann einen bestimmten Gültigkeitsbereich viele Male betreten und wieder verlassen, wie im Fall einer Schließung.

Wenn die Programmiersprache keine Garbage Collection bietet, kann eine Variable, deren Gültigkeitsbereich ihren Umfang dauerhaft übersteigt, zu einem Speicherleck führen, wodurch der für die Variable zugewiesene Speicher nie wieder freigegeben werden kann, da die Variable, die verwendet werden würde, um sie für Deallokationszwecke zu referenzieren, nicht mehr zugänglich ist. Es kann jedoch zulässig sein, dass eine Variablenbindung über ihren Geltungsbereich hinausgeht, wie dies bei Lisp-Schließungen und statischen lokalen C-Variablen der Fall ist; wenn die Ausführung wieder in den Geltungsbereich der Variablen übergeht, kann die Variable erneut verwendet werden. Eine Variable, deren Geltungsbereich vor ihrem Umfang beginnt, wird als nicht initialisiert bezeichnet und hat oft einen undefinierten, willkürlichen Wert, wenn auf sie zugegriffen wird (siehe wilder Zeiger), da ihr noch nicht explizit ein bestimmter Wert zugewiesen wurde. Eine Variable, deren Ausdehnung vor ihrem Geltungsbereich endet, kann zu einem „dangling pointer“ werden und gilt erneut als uninitialisiert, da ihr Wert zerstört wurde. Variablen, die durch die beiden vorangegangenen Fälle beschrieben werden, können als „out of extent“ oder „unbound“ bezeichnet werden. In vielen Sprachen ist es ein Fehler, zu versuchen, den Wert einer Variablen zu verwenden, wenn sie sich außerhalb des Bereichs befindet. In anderen Sprachen kann dies zu unvorhersehbaren Ergebnissen führen. Einer solchen Variablen kann jedoch ein neuer Wert zugewiesen werden, wodurch sie einen neuen Umfang erhält.

Aus Gründen der Platzersparnis kann der für eine Variable benötigte Speicherplatz nur zugewiesen werden, wenn die Variable zum ersten Mal verwendet wird, und freigegeben werden, wenn sie nicht mehr benötigt wird. Eine Variable wird nur dann benötigt, wenn sie sich im Gültigkeitsbereich befindet, daher kann der Beginn der Lebensdauer einer Variablen, wenn sie in den Gültigkeitsbereich eintritt, Platz für ungenutzte Variablen schaffen. Um zu vermeiden, dass solcher Platz verschwendet wird, warnen die Compiler den Programmierer oft, wenn eine Variable deklariert, aber nicht benutzt wird.

Es gilt als gute Programmierpraxis, den Geltungsbereich von Variablen so eng wie möglich zu halten, damit verschiedene Teile eines Programms nicht versehentlich miteinander interagieren, indem sie die Variablen des jeweils anderen ändern. Auf diese Weise wird auch verhindert, dass aus der Ferne gehandelt wird. Gängige Techniken, um dies zu erreichen, bestehen darin, dass verschiedene Abschnitte eines Programms unterschiedliche Namensräume verwenden, oder dass einzelne Variablen entweder durch dynamisches Variablen-Scoping oder lexikalisches Variablen-Scoping „privat“ gemacht werden.

Viele Programmiersprachen verwenden einen reservierten Wert (oft null oder nil genannt), um eine ungültige oder nicht initialisierte Variable anzuzeigen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.