Mit dem loop-Ausdruck werden die Ausdrücke im loop-Block bei jeder Iteration der Schleife wiederholt.
Das GIF unten mit dem Fortnite-Emote Clean Sweep ist ein Beispiel dafür, wie loop funktioniert. Das GIF wird bis zum Ende abgespielt und dann wiederholt. Das Spieler-Emote wird wie die Ausdrücke in einem Schleifenblock behandelt
# GIF
loop:
DoCleanSweepEmote()
Wie ein GIF wird ein Schleifenblock so lange wiederholt, bis er andere Anweisungen erhält. Das nennt man Endlosschleife.
Endlosschleifen sind in meist nicht nützlich, da sie den Programmfortschritt blockieren, daher bietet Verse eine Möglichkeit, sie zu beenden und/oder auszusetzen.
- Beenden: Du kannst eine Schleife beenden, indem du sie entweder mit
breakoder mitreturnverlässt. - Aussetzen: Du kannst eine Schleife aussetzen, wenn sie in einem
async-Ausdruck verwendet wird. Weitere Details findest du unter Übersicht über Gleichzeitigkeit.
Es ist auch beides in der gleichen Schleife möglich. In diesem Beispiel wird der Schleifenblock so lange wiederholt, bis die generierte Zufallszahl kleiner als zwanzig ist.
loop:
# Eine Zufallszahl wird generiert
RandomNumber : int = GetRandomInt(0, 100)
# Es wird geprüft, ob die Zufallszahl kleiner als zwanzig ist
if (RandomNumber < 20):
# Die Schleife wird verlassen
break
Syntaktisch ist dies dasselbe wie:
expression0
loop:
expression-block
if (test-arg-block):
break
expression-block
expression2
Anders als einige andere Ausdrücke für den Kontrollfluss gibt der Schleifenausdruck void zurück, sodass er nicht unbedingt nützlich ist, wenn ein Ausdruck ein Ergebnis zurückgeben soll. Wenn sich die Schleife innerhalb einer Funktion befindet, ist es möglich, mit return einen Wert zurückzugeben. Dadurch wird aber nicht nur die Schleife, sondern auch die Funktion verlassen.
Geschachtelte Schleifenausdrücke
Du kannst eine Schleife in eine andere Schleife schachteln. Die erste Schleife wird manchmal als äußere Schleife bezeichnet, die zweite Schleife als innere Schleife . Wenn der Ausdruck break in einer inneren Schleife ausgeführt wird, wirkt er nur aus der inneren Schleife heraus.
Im Beispiel unten fährt die äußere Schleife mit expression3 und dann mit dem if-Ausdruck fort, nachdem die innere Schleife beendet wurde, und kann expression1 und die innere Schleife erneut ausführen.
expression0
# Äußere Schleife
loop:
expression1
# Innere Schleife
loop:
expression2
if (test-arg-block0):
# Die innere Schleife wird beendet
break
expression3
if (test-arg-block1):
# Die äußere Schleife wird beendet
break
expression4