Referenz - GOTO und GOSUB
Mit den beiden Befehlen GOTO und GOSUB wurden in älteren BASIC-Dialekten Prozeduren erstellt. Es ist theoretisch möglich, einer GOTO/GOSUB-Prozedur Parameter zu übergeben. Dazu müssten (zusätzliche) Variablen deklariert werden, die dann nur in der Prozedur benutzt werden. Auch durch diesen erhöhten Programmieraufwand werden die Unterprogramme leicht unübersichtlich. GOTO und GOSUB sind daher unter Programmierern nicht sonderlich gerne gesehen; der Vollständigkeit halber seien sie jedoch dennoch hier aufgeführt.
GOTO
GOTO "springt" an einen bestimmten Punkt innerhalb des Programms, der sowohl vor als auch hinter der GOTO-Anweisung liegen kann. Die Ausführung des Programms wird dann von dieser Stelle ab fortgesetzt. Der Einsprungpunkt wird durch ein sogenanntes Label markiert. Ein Label ist ein beliebiger Bezeichner, gefolgt von einem Doppelpunkt. In den Dialektformen -lang qb, -lang deprecated und -lang fblite kann als Label auch eine Zahl verwendet werden.
#Lang "qb"
10 PRINT "hello World"
MyLabel:
PRINT "eine zweite Anweisung"
Das Programm merkt sich nicht, von welcher Stelle aus der Sprung durchgeführt wurde. Soll später wieder zurückgesprungen werden, dann muss dieser Rücksprung "manuell" durchgeführt werden, d. h. eine weitere GOTO-Zeile muss das Programm wieder dorthin zurückspringen lassen, von wo es aufgerufen wurde.
Beispiel:
z1: GOTO z4
z2: PRINT "Ciao"
z3: GOTO ende
z4: PRINT "Welcome!"
z5: GOTO z2
ende:
END
Das obige Beispiel ist nicht besonders sinnvoll, sondern soll lediglich das Verhalten des Befehls GOTO demonstrieren. Eingesetzt werden kann GOTO z. B. dann, wenn bestimmte Programmteile unter gewissen Voraussetzungen übersprungen werden sollen oder wenn umgekehrt ein bereits ausgeführter Programmteil nochmal durchlaufen werden soll. Mit GOTO ist es jedoch sehr leicht, sogenannten Spaghetticode zu erzeugen, der sich nur noch schwer warten lässt. Daher sollte man in der Regel versuchen, den Befehl zu vermeiden.
GOTO kann fast immer durch andere Programmstrukturen ersetzt werden. Mit Bedingungsstrukturen wie IF ... THEN und SELECT CASE können auch große Programmteile unter bestimmten Bedingungen übersprungen werden, während Schleifen die mehrfache Ausführung eines Programmabschnitts ermöglichen.
GOSUB
GOSUB springt ähnlich wie GOTO zu einem Label im Programm, merkt sich jedoch die Stelle, von der aus das GOSUB durchgeführt wurde. Sobald das Programm auf die Anweisung RETURN stößt, führt es einen Rücksprung aus. Der Befehl arbeitet damit sehr ähnlich wie eine Prozedur, nur dass eventuell benötigte Parameter "manuell" übergeben werden müssen. Da GOSUB fast vollständig durch Prozeduren ersetzt werden kann, steht es in der Dialektform -lang fb nicht mehr zur Verfügung.
Beispiel:
#Lang "qb"
GOSUB message
END
message:
PRINT "Welcome!"
RETURN
Das Programm benötigt für jeden GOSUB-Aufruf Speicherplatz, um sich die Rücksprungadresse zu merken. Dieser Speicherplatz wird nach dem RETURN wieder freigegeben. Beenden Sie daher einen mit GOSUB ausgeführten Sprung immer mit RETURN, um einen Speicherüberlauf zu vermeiden.
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|