DO (TSB)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
DO (TSB)
Syntax: DO .. DONE
Parameter
keine
Einordnung
Typ: Anweisung
Kontext: Strukturkontrolle
Aufgabe: umschließt mehrzeilige Bedingungszweige
Abkürzung: keine
Token: $64 $22 (100 34)
Verwandte Befehle
ELSE - DO NULL - RCOMP - IF - THEN


Dieser Artikel beschreibt das TSB-Schlüsselwort DO (TSB).
Es gibt kein entsprechendes Simons’-Basic-Schlüsselwort.

Typ: Anweisung
Syntax: IF <Bedingung> THEN DO [..] DONE

Mit DO und DONE hat der Programmierer die Möglichkeit, die beiden Bedingungszweige eines IF über mehrere BASIC-Zeilen auszuweiten, und so sein Programm erheblich übersichtlicher und lesbarer zu gestalten. Ein einzeln stehendes ELSE trennt hier die Wahr- und Nicht-Wahr-Zweige voneinander (siehe Beispiel), ist kein Nicht-Wahr-Zweig vorgesehen, kann ELSE weggelassen werden.

DO ist (seit Version 2.31113, "TSBneo") bis zu 10 Ebenen verschachtelbar. Die Verschachtelung darf auch indirekt (in einer Prozedur, die aus einem DO..DONE heraus aufgerufen wurde) geschehen. Ab der 11. Ebene gibt es einen ?OVERFLOW ERROR.

Beachten

  • Der Stack der DO-DONE-Konstruktion wird nicht überwacht, die Befehle und müssen deshalb syntaxkonform angewendet werden. Verlässt man eine solche Konstruktion vorzeitig, wird erstens der Stack nicht bereinigt und läuft bei wiederholter Ausführung über. Zweitens ist dann die Logik der Verschachtelung korrumpiert und führt in der Folge zu falschen Entscheidungen des Programms.
  • Sollte ein Programm mit DO und DONE sich nach RUN unerwartet selbst beenden, wurde mit höchster Wahrscheinlichkeit das DONE vergessen (was keine Fehlermeldung hervorruft, sondern den beschriebenen Effekt hat).
  • In Prozedurnamen darf die Zeichenfolge DO nicht vorkommen (wie z.B. im Wort "shadow").


Beispiel

10 PRINT "test ";
20 FETCH "jn",1,x$
30 IF x$ = "j" THEN DO
40 :  PRINT "ja"
50 ELSE
60 :  PRINT "nein"
70 DONE

Je nachdem, ob der Benutzer "j" oder "n" drückt, erscheint eine andere Antwortausgabe.

Ein komplettes Anwendungsbeispiel findet sich beim Simons-Basic-Befehl MOB SET Beispiel 2.