LOOP (BASIC 3.5)

Aus C64-Wiki
Wechseln zu: Navigation, Suche
LOOP (BASIC 3.5)
Format: LOOP [UNTIL|WHILE <Bedingung>]
Parameter
<Bedingung>: beliebiger Ausdruck, dessen Ergebnis als logisch falsch bzw. logisch wahr interpretiert werden kann
Einordnung
Typ: Anweisung
Kontext: Programmstruktur
Aufgabe: Abschluss einer DO-LOOP-Schleife
Abkürzung: loO
Verwandte Befehle
DO, EXIT, FOR, UNTIL, WHILE

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl LOOP ab Commodore BASIC V3.5 oder höher.


Die Anweisung LOOP markiert das Ende einer DO-LOOP-Schleife. Der Befehl kann von einer Laufbedingung gefolgt sein, die nach jedem Durchlauf der Schleife geprüft wird. Ist die Laufbedingung erfüllt, wird die Startposition der Schleife (am BASIC-Stapel vermerkt) angesprungen. Ist auf dem BASIC-Stapel der korrespondierende Vermerk mit der DO-Position nicht vorhanden, wird mit Fehlermeldung ?LOOP WITHOUT DO ERROR abgebrochen.
Ein Schleife kann durchaus mehrere LOOP-Befehle aufweisen, jedoch muss dafür gesorgt werden, dass immer nur eine davon in einem Schleifendurchlauf zum Zug kommen kann. Beispielsweise kann mit einem LOOP ohne Laufbedingung vorzeitig und sofort wieder am Schleifenanfang fortgesetzt werden.

Die Laufbedingung besteht aus einem der Schlüsselwörter UNTIL oder WHILE, gefolgt von einem beliebigen, auswertbaren BASIC-Ausdruck:

  • Bei UNTIL wird die Schleife ausgeführt, solange der Ausdruck logisch falsch ist.
  • Bei WHILE hingegen solange der Ausdruck logisch wahr ist.

Wie bei IF-THEN gilt das Ergebnis als wahr, wenn es ungleich 0 ist oder eine nichtleere Zeichenkette ergibt (mit dem selben ungewöhnlichen Verhalten).

Eine DO-LOOP-Schleife ist einer GOTO-Schleife stets vorzuziehen, da

  • sie aus Sicht der Laufzeit immer schneller ist, weil nämlich ein GOTO im Falle eines Sprungs zu kleineren Zeilennummern immer das entsprechende Ziel abhängig von der Zeilenanzahl vom Programmanfang beginnend "suchen" muss.
  • Schleifen unabhängig von der Position und Zeilennummerierung ist.
  • der Schleifenanfang nicht zwingend an einem Zeilenanfang liegen muss.


Aufbau einer DO-LOOP-Schleife

Formal ist eine DO-LOOP-Schleife folgendermaßen aufgebaut:

DO [UNTIL|WHILE <Bedingung1>]
...
[IF <Bedingung2> THEN EXIT]
...
LOOP [UNTIL|WHILE <Bedingung3>]

DO bildet den Kopf (Beginn), LOOP den Fuß (Abschluss) der Schleife. Zusätzlich ist ein vorzeitiges Verlassen der Schleife mit der Anweisung EXIT möglich.

Beispiele[Bearbeiten]

100 T=TI:DO:GET K$:LOOP UNTIL K$<>"" OR TI>T+600

Wartet bis eine Taste gedrückt wird oder mehr als 10 Sekunden vergangen sind (einen etwaigen Überlauf des Timer-Wertes in TI vernachlässigend).


BASIC V2.0 Nachbildung

Am Beispiel von UNTIL:

100 DO
110 REM SCHLEIFENKOERPER
120 LOOP UNTIL BE

kann unter BASIC V2.0 wie folgt nachgebildet werden:

100 :
110 REM SCHLEIFENKOERPER
120 IF (BE)=0 GOTO 100

oder ohne rückwärtsgerichtetes GOTO, also mit besserem Laufzeitverhalten:

100 FOR BE=0 TO -1 STEP -1 
110 REM SCHLEIFENKOERPER
120 BE=(<Bedingung>) : IF BE=0 THEN NEXT

Diese Varianten haben allerdings die Einschränkung, dass sich der Schleifenbeginn und das Schleifenende jeweils stets nur an einem Zeilenanfang befinden kann.