Goto
YueScript suporta a instrução goto e a sintaxe de rótulos para controlar o fluxo do programa, seguindo as mesmas regras da instrução goto do Lua. Nota: A instrução goto requer Lua 5.2 ou superior. Ao compilar para Lua 5.1, o uso da sintaxe goto resultará em um erro de compilação.
Um rótulo é definido usando dois pontos duplos:
::inicio::::fim::::meu_rotulo::::inicio::::fim::::meu_rotulo::A instrução goto salta para um rótulo especificado:
a = 0::inicio::a += 1goto fim if a == 5goto inicio::fim::print "a agora é 5"a = 0::inicio::a += 1goto fim if a == 5goto inicio::fim::print "a agora é 5"A instrução goto é útil para sair de laços profundamente aninhados:
for z = 1, 10 for y = 1, 10 do for x = 1, 10 if x^2 + y^2 == z^2 print 'triplo pitagórico encontrado:', x, y, z goto ok::ok::for z = 1, 10 for y = 1, 10 do for x = 1, 10 if x^2 + y^2 == z^2 print 'triplo pitagórico encontrado:', x, y, z goto ok::ok::Você também pode usar rótulos para pular para um nível específico de laço:
for z = 1, 10 for y = 1, 10 for x = 1, 10 if x^2 + y^2 == z^2 print 'triplo pitagórico encontrado:', x, y, z print 'tentando próximo z...' goto zcontinue ::zcontinue::for z = 1, 10 for y = 1, 10 for x = 1, 10 if x^2 + y^2 == z^2 print 'triplo pitagórico encontrado:', x, y, z print 'tentando próximo z...' goto zcontinue ::zcontinue::- Rótulos devem ser únicos dentro de seu escopo
- goto pode pular para rótulos nos mesmos níveis de escopo ou externos
- goto não pode pular para escopos internos (como dentro de blocos ou laços)
- Use goto com moderação, pois pode tornar o código mais difícil de ler e manter