Com a expressão loop, as expressões no bloco de loop são repetidas para cada iteração do loop.
O gif abaixo do emote "Clean Sweep" do Fortnite é um exemplo de como um loop funciona. O gif é reproduzido até o final, depois se repete desde o início, e o emote do jogador é semelhante às expressões em um bloco de loop.
# Gif
loop:
DoCleanSweepEmote()
Como um gif, um bloco de loop se repetirá para sempre, a menos que seja instruído a fazer o contrário. Isso é chamado de loop infinito*.
Loops infinitos não são muito úteis na maioria dos casos, pois bloquearão o progresso do programa, então o Verse fornece uma maneira de encerrar e/ou suspender.
- Encerrar: você pode encerrar um loop saindo com
breakoureturn. - Suspender: você pode suspender um loop quando ele é usado em uma expressão
async. Consulte Visão geral sobre simultaneidade para obter mais detalhes.
Também é possível fazer as duas coisas no mesmo loop. Neste exemplo, o bloco de loop se repete até que o número aleatório gerado seja menor que vinte.
loop:
# Gerar número aleatório
RandomNumber : int = GetRandomInt(0, 100)
# Verificar se o número aleatório é menor que 20
if (RandomNumber < 20):
# Sair do loop
break
Sintaticamente, isso é igual a:
expression0
loop:
expression-block
if (test-arg-block):
break
expression-block
expression2
Diferentemente de algumas das outras expressões de fluxo de controle, a expressão loop retorna void e, portanto, pode não ser útil nos casos em que você deseja que uma expressão retorne um resultado. Se o loop estiver dentro de uma função, será possível retornar um valor com return, mas isso sairá não apenas do loop, mas também da função.
Expressões de loop aninhadas
Você pode aninhar um loop dentro de outro. O primeiro loop às vezes é chamado de loop externo, e o segundo loop é chamado de loop interno. Quando a expressão break é executada em um loop interno, ela só sai do loop interno.
No exemplo abaixo, o loop externo continua até expression3 e, em seguida, a expressão if após o loop interno é encerrada e pode executar expression1 e o loop interno novamente.
expression0
# Loop externo
loop:
expression1
# Loop interno
loop:
expression2
if (test-arg-block0):
# Sair do loop interno
break
expression3
if (test-arg-block1):
# Sair do loop externo
break
expression4