DO (TSB)
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.
$$ | %% | AT | CALL | CENTER | CHECK | COLD | COLOR | COPY | CLS | CSET | D! | D!PEEK | D!POKE | DIR | DISK | DISPLAY | DIV | DO | DO NULL | DRAW TO | DUMP | DUP | ELSE | ERROR | EXEC | FETCH | FIND | GRAPHICS | INSERT | INST | JOY | KEY | KEYGET | LIN | MAP | MEMCLR | MEMCONT | MEMDEF | MEMLEN | MEMLOAD | MEMOR | MEMPEEK | MEMPOS | MEMREAD | MEMRESTORE | MEMSAVE | MERGE | MOB ON/OFF | MOBCOL | MOD | MOVE | MULTI | NRM | ON ERROR | ON KEY | OPTION | OUT | PAGE | PAINT | PAUSE | PLACE | RENUMBER | RESUME | RETRACE | SCRLD | SCRSV | SOUND | TEXT | TRACE | USE | WAVE | X!