From cf5b1b4a68d762e6e33cac8367611ecea15fa942 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Sun, 15 Feb 2026 05:49:13 +0000 Subject: Add goto statement documentation and tests - Added goto.md documentation files in all languages (en, de, zh, pt-br, id-id) - Updated conditionals.md to include goto statement references - Updated VitePress config to include new goto documentation pages - Updated makefile for goto documentation compilation - Added test outputs for goto examples in all languages - Updated yue.cpp core implementation Co-Authored-By: Claude Sonnet 4.5 --- doc/docs/pt-br/doc/control-flow/conditionals.md | 58 +++++++++++++ doc/docs/pt-br/doc/control-flow/goto.md | 106 ++++++++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 doc/docs/pt-br/doc/control-flow/goto.md (limited to 'doc/docs/pt-br') diff --git a/doc/docs/pt-br/doc/control-flow/conditionals.md b/doc/docs/pt-br/doc/control-flow/conditionals.md index bc12d4e..ce32d89 100644 --- a/doc/docs/pt-br/doc/control-flow/conditionals.md +++ b/doc/docs/pt-br/doc/control-flow/conditionals.md @@ -143,3 +143,61 @@ if a in list ``` + +O operador `in` também pode ser usado com tabelas e suporta a variante `not in` para negação: + +```yuescript +has = "foo" in {"bar", "foo"} + +if a in {1, 2, 3} + print "a está na tabela" + +not_exist = item not in list + +check = -> value not in table +``` + + + +```yue +has = "foo" in {"bar", "foo"} + +if a in {1, 2, 3} + print "a está na tabela" + +not_exist = item not in list + +check = -> value not in table +``` + + + +Uma lista ou tabela de único elemento verifica igualdade com esse elemento: + +```yuescript +-- [1,] verifica se valor == 1 +c = a in [1,] + +-- {1} também verifica se valor == 1 +c = a in {1} + +-- Sem vírgula, [1] é acesso por índice (tb[1]) +with tb + c = a in [1] +``` + + + +```yue +-- [1,] verifica se valor == 1 +c = a in [1,] + +-- {1} também verifica se valor == 1 +c = a in {1} + +-- Sem vírgula, [1] é acesso por índice (tb[1]) +with tb + c = a in [1] +``` + + diff --git a/doc/docs/pt-br/doc/control-flow/goto.md b/doc/docs/pt-br/doc/control-flow/goto.md new file mode 100644 index 0000000..f4c85f4 --- /dev/null +++ b/doc/docs/pt-br/doc/control-flow/goto.md @@ -0,0 +1,106 @@ +# 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: + +```yuescript +::inicio:: +::fim:: +::meu_rotulo:: +``` + + + +```yue +::inicio:: +::fim:: +::meu_rotulo:: +``` + + + +A instrução goto salta para um rótulo especificado: + +```yuescript +a = 0 +::inicio:: +a += 1 +goto fim if a == 5 +goto inicio +::fim:: +print "a agora é 5" +``` + + + +```yue +a = 0 +::inicio:: +a += 1 +goto fim if a == 5 +goto inicio +::fim:: +print "a agora é 5" +``` + + + +A instrução goto é útil para sair de laços profundamente aninhados: + +```yuescript +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:: +``` + + + +```yue +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: + +```yuescript +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:: +``` + + + +```yue +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:: +``` + + + +## Notas + +- 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 -- cgit v1.2.3-55-g6feb