LOCAL Variable

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Definition einer LOCAL Variablen

LOCAL Variable gehören zu den lexikalischen Variablen, die durch den [Xpp|Compiler]] aufgrund einer expliziten Definition (LOCAL Statement), oder implizit als Parameter einer Funktion deklariert werden.

FUNCTION TueIrgendEtwas(cParam1, nParam2)
  LOCAL nI, nLen

Werden Parameter in den auf den Namen der Funktion folgenden Klammern definiert, werden sie als LOCAL Variable angelegt. cParam1 und nParam2 sind also implizit definierte LOCAL Variablen, während nI und nLen explizit über die Anweisung LOCAL deklariert wurden.

Zur Reihenfolge der Deklaration siehe ausführbare und nicht ausführbare Deklarationen.

Unterschiede zu dynamisch deklarierten Variablen

Im Unterschied zu den dynamischen Variablen existiert der Variablenname zur Laufzeit nicht mehr, sondern die Variable (bzw. der Inhalt) werden durch einen Pointer abgebildet.

LOCAL bBlock, nI
bBlock := {|| nI}
nI := 10
? Eval(bBlock)

Dieser kleine Codeausschnitt zeigt "10" im Fenster an. Beim Ausführen des Codeblocks in bBlock wird der Wert der Variablen nI zurückgeliefert. Bei der Ausführung wird auf die Speicheradresse von nI direkt zugegriffen. Der Codeblock wird in diesem Beispiel direkt vom Compiler erzeugt.

Alternativ konnte man früher (!) auch das machen:

PRIVATE bBlock, nI
bBlock := "{|| nI}"
bBlock := &bBlock
nI := 10
? Eval(bBlock)

Hier wird der Codeblock in zwei Schritten erzeugt, indem zuerst bBlock zuerst ein Literal zugewiesen wird, und danach wird der Inhalt (!) von bBlock compiliert. Bei der Ausführung wird in der Variablentabelle die Variable nI gesucht und ihr Inhalt ausgegeben.

Was passiert in diesem Fall:

LOCAL bBlock, nI
bBlock := "{|| nI}"
bBlock := &bBlock
nI := 10
? Eval(bBlock)

Alle Anweisungen bis hin zur Zuweisung von 10 an die Variable nI werden ausgeführt. Beim Eval() jedoch erscheint eine Fehlermeldung:

Error BASE/2000
Description: Unknown Variable
Operation: NI
...

Beim Compileren des Codeblocks besteht keine Verbindung mehr zwischen dem Variablen-Namen nI und der Speicheradresse, an welcher der Inhalt von nI abgelegt ist. Die Laufzeitumgebung vermutet, dass nI eine dynamische Variable sein könnte und erzeugt den Codeblock entsprechend.

Wenn der Codeblock ausgeführt werden soll, wird in der Variablentabelle nachgesehen, ob es eine dynamische Variable mit dem Namen nI gibt. Da dies nicht der Fall ist, gibt es eine Fehlermeldung.

Sichtbarkeit von LOCAL Variablen

Genaueres findet sich hier: Lebenszeit und Sichtbarkeit der Variablen-Klassen