Wyrażenie loop umożliwia powtarzanie wyrażeń z zapętlonego bloku dla każdej iteracji pętli.
Poniższy GIF przedstawiający emotkę zamiatanka w Fortnite jest przykładem działania wyrażenia loop. GIF jest odtwarzany do końca, a następnie powtarzany od początku, a wykonywanie emotki przez gracza przypomina wyrażenia w bloku pętli.
# GIF
loop:
DoCleanSweepEmote()Podobnie jak w przypadku grafiki GIF, blok pętli będzie powtarzany w nieskończoność, dopóki nie zostanie przerwany za pomocą odrębnej instrukcji. Taka pętla nazywana jest pętlą nieskończoną.
W większości przypadków pętle nieskończone nie są zbyt przydatne, ponieważ blokują postęp programu, dlatego Verse oferuje sposób ich zakończenia i/lub zawieszenia.
Zakończenie: Do zakończenia pętli można użyć wyrażenia break lub
return.Zawieszenie: Pętlę można zawiesić, jeśli została użyta w wyrażeniu
async. Więcej szczegółów zawiera temat Współbieżność – informacje ogólne.
Można również zastosować obydwa rozwiązania w tej samej pętli. W poniższym przykładzie blok pętli będzie powtarzany, dopóki generowana losowo liczba nie będzie mniejsza od dwudziestu.
loop:
# generate random number
RandomNumber : int = GetRandomInt(0, 100)
# check if random number is less than twenty
if (RandomNumber < 20):
# exit loop
breakSkładniowo wygląda to tak samo jak:
expression0
loop:
expression-block
if (test-arg-block):
break
expression-block
expression2W przeciwieństwie do innych wyrażeń sterowania przepływem, wyrażenie loop zwraca wartość void, dlatego może być nieprzydatne w przypadkach, gdy chcemy, aby wyrażenie zwracało wynik. Jeśli wyrażenie loop znajdzie się wewnątrz funkcji, wówczas istnieje możliwość zwrócenia wartości typu return, jednak spowoduje to zakończenie nie tylko pętli, ale także całej funkcji.
Zagnieżdżone wyrażenia loop
Istnieje możliwość zagnieżdżenia jednej pętli w drugiej. Pierwsza pętla bywa nazywana pętlą zewnętrzną, a druga pętla nazywana jest pętlą wewnętrzną. Wykonanie wyrażenia break w pętli wewnętrznej spowoduje przerwanie wyłącznie pętli wewnętrznej.
W poniższym przykładzie wykonywanie pętli zewnętrznej jest kontynuowane do wyrażenia expression3, a następnie wyrażenie if następujące po pętli wewnętrznej zostaje zakończone i może ponownie wykonać wyrażenie expression1 oraz pętlę wewnętrzną.
expression0
# outer loop
loop:
expression1
# inner loop
loop:
expression2
if (test-arg-block0):
# exit inner loop
break