Eine lokale Variable ist eine Variable, die innerhalb eines Codeblockes existiert. (Zwischen einer öffnenden "{" und einer schließenden "}" Klammer). Sie sind nur innerhalb des gleichen Kontexts (Bereich) oder im Bereich des Scripts zugänglich, in dem sie deklariert wurden. (Vergleiche auch mit globalen Variablen, auf welche in jedem Teil des Scripts, zugegriffen und referenziert werden kann).
Aller Code innerhalb des lokalen Codeblockes der Variablen hat Zugriff auf diese, vorausgesetzt, er folgt der lokalen Variabledeklaration. (Denk daran, dass Operationen in der Reihenfolge ausgeführt werden, wie Du sie im Code schreibst). Das betrifft auch die Codeblöcke, die innerhalb des lokalen Codeblockes der Variablen deklariert werden.
Beispiel:
myFunction() {
anInteger = 5; // UNGÜLTIG!!! anInteger ist noch nicht deklariert worden!
integer anInteger; // Deklaration (Erzeugung) einer lokalen Variablen.
if(someCondition) {
anInteger = 4; // gültig!
}
anInteger = 12; // gültig!
}
default {
state_entry() {
anInteger = 122;
//UNGÜLTIG!!! anInteger wurde innerhalb des CodeBlock von „myFunction()“ deklariert.
//Technisch gesehen existiert sie außerhalb des Codeblocks nicht.
//Um anInteger wieder zu benutzen, musst Du sie noch einmal innerhalb von „state_entry“
//deklarieren, jedoch selbst wenn Du das tust, hat sie keine Verbindung zu „anInteger“ in „myFunction ()“.
integer anotherInteger; // Deklaration (Erzeugung einer globalen Variablen).
anotherInteger = 3; // gültig!
if(someCondition) {
anotherInteger = 492; // gültig!
if(anotherCondition) {
anotherInteger = 122; // gültig!
}
}
}
touch_start(integer n) {
anotherInteger = 12; //UNGÜLTIG!
//„anotherInteger“ wurde innerhalb „state_entry()“ CodeBlocks deklariert.
//Sie muss neu deklariert werden, um sie im „touch_start“ Codeblock zu verwenden.
if(someCondition) {
integer yetAnotherInteger; // Declaration.
yetAnotherInteger = 4; // gültig!
if(someOtherCondition) {
yetAnotherInteger = 1239; // gültig!
}
}
yetAnotherInteger = 1223;
//UNGÜLTIG!
//„yetAnotherInteger“ wird innerhalb des CodeBlock von „if(someCondition)“deklariert
//und kann nicht außerhalb dieses Codeblocks verwendet werden.
}
}
Du kannst viele mekwürdige schrullige Sachen machen, wenn du zwei Variablen den gleichen Namen gibst. Speziell, wenn es lokale und globale Variablen sind.
Hier ist ein Fall, den Du NICHT haben möchtest:
Beispiel (NICHT vorgeschlagene CODIERUNG-PRAXIS):
integer myInteger = 3; //Dies ist eine globale Variable
integer myFunction(float myFloat)
{
integer myInteger = 6;
//Dies ist eine lokale Variable mit dem selben Namen wie die globale. Es ist sehr schlechte Codierpraxis,
//obgleich zulässig, Variablen so zu definieren. Man nennt das glaube ich, eine Variable „verbergen“.
//Jede Änderung, die an „myInteger“ in dieser Funktion vorgenommen wird, beeinflusst die lokale
//Variable, NICHT die globale Variable. An jeder Stelle innerhalb dieser Funktion, die „myInteger“ benutzt,
//sprechen wir über die „integer“ oben, NICHT die globale Variable.
return myInteger;
}
default
{
state_entry()
{
myInteger = 2; //Dies stellt die globale Variable auf 2 ein
llWhisper(0,(string)myFunction(1.0)); //Dies flüstert 6
llWhisper(0,(string)myInteger); //Dies flüstert 2.
// Beachte, dass „myFunction“ nicht den Wert der globalen Variablen ändert,
//dies sind zwei verschiedene Variablen.
}
}
Zusammenfassung:
Lokale Variablen sind Variablen, auf die man nicht im gesamten Programm zugreifen kann.
Ist beispielsweise eine Variable innerhalb einer Funktion deklariert, kann man diese nur innerhalb, jedoch nicht außerhalb, der Funktion ansprechen und benutzen.
Der Name der Variablen muss in diesem Fall nur innerhalb der Funktion eindeutig sein. In einer anderen Funktion kann es natürlich eine Variable mit dem gleichen Namen geben, da diese ja nur innerhalb der Funktion gültig sind.
Vergleiche mit Global Variables.