LOCAL
LOCAL | |
Syntax: | LOCAL <v1> [, <v2>] ... |
Parameter | |
v1: Variablenname ... | |
Einordnung | |
Typ: | Anweisung |
Kontext: | Strukturkontrolle |
Aufgabe: | Definieren lokal gültiger Variablen |
Abkürzung: | keine (TSB: loC) |
Token: | $64 $45 (100 69) |
Verwandte Befehle | |
GLOBAL |
Dieser Artikel beschreibt das Simons'-Basic-Schlüsselwort LOCAL.
Typ: Anweisung Syntax: LOCAL <v1> [, <v2>] ...
LOCAL dient dazu, Variableninhalte zu definieren, die nur an bestimmten Stellen des Programms Gültigkeit haben. Normalerweise sind Variablen in der Programmiersprache BASIC programmweit gültig, einmal ein Wert zugewiesen, kann dieser Wert überall im Programm wieder abgerufen werden. Was wie ein Vorteil klingt, kann sehr schnell zum Nachteil werden: Bei großen Programmvorhaben darf man nämlich nicht den Überblick über den momentanen Inhalt einer Variable verlieren, sonst reagiert das Programm irgendwann auf unvorhergesehene Weise und die Fehlersuche ist äußerst langwierig. Andere Programmiersprachen wie z.B. Pascal oder C sorgen schon von vornherein dafür, dass diese Hürde klein bleibt, denn dort gelten Variablen zunächst einmal ausschließlich lokal (nur innerhalb einer Prozedur oder Funktion).
Da auch Simons' Basic Prozedur-Befehle kennt (EXEC, PROC), liegt es nur nahe, dass auch eine Möglichkeit geschaffen wurde, nur dort gültige Variablen zu benutzen. Dies wird mit LOCAL zum Teil erreicht. Intern nämlich werden die lokalen Variablen in einer Liste geführt. Solange eine lokale Variable aktiviert ist, wird ihr globales Pendant unkenntlich gemacht, jedoch aber nicht gelöscht. Endet der lokale Bezug, tritt die alte, globale Variable wieder ein, mit ihren bis dahin gültigen Inhalten. Wird nun die lokale Variable erneut aktiviert, passiert das Gleiche wie oben beschrieben. Bedauerlich ist nun, dass lokale Variablen nicht an eine bestimmte Prozedur gebunden sind, sondern überall sonst auch ihren vorherigen lokalen Wert wieder erhalten! Somit ist die Lokalität von LOCAL höchst eingeschränkt. Außerdem beanspruchen sie für jede Variable zusätzlichen Platz im freien BASIC-Speicher.
Hinweis: Feldvariablen (Arrays) können nicht mit LOCAL bearbeitet werden.
Beispiel[Bearbeiten | Quelltext bearbeiten]
100 a=1: b%=10 : c$="test" 110 PRINT "dies ist ein test:" 120 PRINT "a="a; "b%="b%; "c$= "c$ 130 EXEC prozedur 140 PRINT "zurueck im hauptprogramm:" 150 PRINT "a="a; "b%="b%; "c$= "c$ 160 PRINT "test beendet." 170 END 999 : 1000 PROC prozedur 1010 LOCAL a, b%, c$ 1020 a=100: b%=-10: c$="lokal" 1030 PRINT "und hier innerhalb der prozedur: " 1040 PRINT "a="a; "b%="b%; "c$= "c$ 1050 GLOBAL 1060 END PROC
Die PRINT-Ausgabe wird dreimal wiederholt: vor, während und nach der lokalen Phase.
$ | % | @ | ANGL | ARC | AT | AUTO | BCKGNDS | BFLASH | BLOCK | CALL | CENTRE | CGOTO | CHAR | CHECK | CIRCLE | CMOB | COLD | COLOUR | COPY | CSET | DELAY | DESIGN | DETECT | DIR | DISABLE | DISAPA | DISK | DISPLAY | DIV | DOWN | DRAW | DUMP | DUP | ELSE | END LOOP | END PROC | ENVELOPE | ERRLN | ERRN | EXEC | EXIT | EXOR | FCHR | FCOL | FETCH | FILL | FIND | FLASH | FRAC | GLOBAL | GRAPHICS | HI COL | HIRES | HRDCPY | INKEY | INSERT | INST | INV | JOY | KEY | LEFT | LIN | LINE | LOCAL | LOOP | LOW COL | MEM | MERGE | MMOB | MOB OFF | MOB SET | MOD | MOVE | MULTI | MUSIC | NO ERROR | NRM | OFF | OLD | ON ERROR | ON KEY | OPTION | OUT | PAGE | PAINT | PAUSE | PENX | PENY | PLACE | PLAY | PLOT | POT | PROC | RCOMP | REC | RENUMBER | REPEAT | RESET | RESUME | RETRACE | RIGHT | RLOCMOB | ROT | SCRLD | SCRSV | SECURE | SOUND | TEST | TEXT | TRACE | UNTIL | UP | USE | VOL | WAVE