ToDo: Kontrolle

Hamsterskript: Sprünge

Sprünge erlauben bei der Abarbeitung von Anweisungsfolgen eine Abweichung von der Reihenfolge, in der die Anweisungen im Quelltext stehen und in der sie ausgeführt würden. Ein Sprung wird durch die Sprunganweisung „goto()“ ausgelöst, in deren Klammern ein Bezeichner als Sprungziel anzugeben ist. Das Sprungziel wird durch ein Label gekennzeichnet; indem vor der ersten nach dem Sprung auszuführenden Anweisung die „label()“-Anweisung als Sprungmarke eingefügt wird:

print( "Letzte Anweisung vor dem Sprung" )
goto(Ziel) # Sprunganweisung
print( "Diese Anweisung wird übersprungen." )
label(Ziel ) # Sprungziel
print( "Erste Anweisung nach dem Sprung" )

Die erste Anweisung dieses Beispiels gibt den Text „Letzte Anweisung vor dem Sprung“ aus, bevor die „goto( Ziel)“-Anweisung mit der ersten, auf die „label(Ziel)“-Anweisung folgenden Anweisung fortfahren lässt. Beachte, dass „Ziel“ ein Bezeichner, aber kein Stringliteral sein kann.

Die Kombination von Sprüngen und Verzweigungen ermöglicht die Realisierung von Schleifen. Eine Schleife veranlasst die wiederholte Ausführung von Anweisungen. Das Beispiel

# Anweisungen vor der Schleife
label( Schleifenkopf )
# Schleifenrumpf mit Anweisungen
if(<boolean expression>) # Verzweigung
  goto(Schleifenende)
 else
  goto(Schleifenkopf)
endif
label( Schleifenende )
# Anweisungen nach der Schleife
wiederholt alle Anweisungen zwischen den Sprungmarken „Schleifenkopf“ und „Schleifenende“, bis die durch den Booleschen Ausdruck <boolean expression> gegebene Bedingung erfüllt ist. Diese Abbruchbedingung wird nach jedem Schleifendurchgang erneut geprüft.

Derartige Konstruktionen sind allerdings obsolet und schlechter Programmierstil, da für diesen Zweck übersichtlichere Konstrukte bereitstehen. Das Beispiel lässt sich besser durch die Kontrollstruktur einer postkonditionalen Schleife formulieren. Der Auszug

# Anweisungen vor der Schleife
repeat
  # Schleifenrumpf mit Anweisungen
until( <boolean expression> )
# Anweisungen nach der Schleife

verhält sich ebenso wie das erste Beispiel, ist dabei aber kürzer und bringt den wiederholenden Charakter und die Prüfung der Abbruchbedingung nach jedem Durchlauf deutlicher zum Ausdruck. Es gibt keinen Ablauf, der den Gebrauch von Sprüngen erzwingen oder auch nur empfehlen würde; ein Skript ohne Sprünge ist wohlstrukturiert.