Con l'espressione loop, le espressioni nel blocco del loop vengono ripetute per ogni iterazione del loop.
La GIF qui sotto dell'emote Bella spazzata di Fortnite è un esempio di come funziona un loop. La GIF viene riprodotta fino alla fine, poi si ripete dall'inizio, e il giocatore che esegue le emote sembra ripetere le espressioni in un blocco di loop.
# GIF
loop:
DoCleanSweepEmote()Proprio come una GIF, un blocco di loop si ripete all'infinito a meno che non venga istruito diversamente. Viene definito loop infinito.
I loop infiniti in genere non sono molto utili perché bloccano l'avanzamento del programma, per questo Verse ha un modo per terminarli e/o sospenderli.
Fine: puoi terminare un loop uscendo con break o
return.Suspend: puoi sospendere un loop se è utilizzato in un'espressione
async. Per maggiori dettagli, vedi Panoramica sulla concorrenza.
È ugualmente possibile eseguire entrambe le operazioni nello stesso loop. In questo esempio, il blocco di loop si ripete fino a quando il numero casuale generato è inferiore a venti.
loop:
# generate random number
RandomNumber : int = GetRandomInt(0, 100)
# check if random number is less than twenty
if (RandomNumber < 20):
# exit loop
breakSintatticamente, questo è lo stesso di:
expression0
loop:
expression-block
if (test-arg-block):
break
expression-block
expression2A differenza di altre espressioni del flusso di controllo, l'espressione loop restituisce void, quindi potrebbe non essere utile nei casi in cui si desidera che un'espressione restituisca un risultato. Se il loop si trova all'interno di una funzione, è possibile restituire un valore con return, ma ciò determina l'uscita non solo dal loop ma anche dalla funzione.
Espressioni con loop nidificato
Puoi nidificare un loop all'interno di un altro loop. In alcuni casi, il primo loop è chiamato loop esterno, mentre il secondo loop interno. Quando l'espressione break viene eseguita in un loop interno, si interrompe solo al di fuori del loop interno.
Nell'esempio seguente, il loop esterno continua fino a expression3, poi all'espressione if dopo che il loop interno è uscito e può eseguire di nuovo expression1 e il loop interno.
expression0
# outer loop
loop:
expression1
# inner loop
loop:
expression2
if (test-arg-block0):
# exit inner loop
break