Unbedingte Sprünge und Unterprogrammaufrufe

Beispiele

InitVal=1
FOR i=1 TO 10 STEP 1
GOSUB do_add
NEXT
DISP InitVal "\n"
GOTO Ende
do_add :
InitVal=InitVal+i^2
RETURN
Ende:
STOPPROG

In diesem einfachen Beispiel wird ein Unterprogramm definiert, dass zwei Werte miteinander verrechnet. Da das Unterprogramm im gleichen Kontext wie das Hauptprogramm abgearbeitet wird, kann das Unterprogramm auf alle Variablen des Hauptprogrammes zugreifen und diese entsprechend manipulieren. Der Programmierer sollte sich der damit einhergehenden Gefahr bewusst sein, denn bei einer unübersichtlichen Programmierung besteht das ausgeprägte Risiko, dass innerhalb von Unterprogrammen Variablen modifiziert werden, die an anderer Stelle im Hauptprogramm verwendet werden.
Mit Prozeduren und Funktionen wird das Risiko der versehentlichen Manipulation von Variablen entsprechend minimiert, da diese in einem eigenen Kontext ablaufen.

Referenz

Zeilenmarke:
GOTO Zeilenmarke
GOSUB Zeilenmarke
RETURN
SUBLEVEL
POP RETURN

Zeilenmarken sind Bezeichner, die am Anfang einer Zeile stehen und mit einem Doppelpunkt enden. Eine Zeilenmarke unterliegt den gleichen Restriktionen wie ein Variablenname. Die GOTO-Anweisung verzweigt bedingungslos direkt zu der angegebenen Zeilenmarke. Mit GOSUB wird ein Unterprogramm, anfangend an der Zeilenmarke aufgerufen. Das Unterprogramm wird mit RETURN beendet, daraufhin wird die Abarbeitung des Programmcodes an der der GOSUB-Anweisung folgenden Anweisung fortgesetzt.
Die Funktion SUBLEVEL liefert die aktuelle Unterprogrammebene zurück. Die Anweisung POP RETURN verwirft die aktuelle Unterprogrammebene. Es ist also möglich mit SUBLEVEL und POP RETURN aus einem Unterprogramm herauszuspringen, ohne es auf regulärem Wege via RETURN zu verlassen. Dergestalte Programmtechniken widersprechen jedoch jedem guten Stil und führen zum berüchtigten Spaghetti-Code. Man sollte also sehr sorgfältig damit umgehen und ein Unterprogramm z.B. nur in besonderen Fehlersituationen auf irregulärem Weg verlassen.

Siehe auch



Schatten