A instrução GO TO
transfere o controle de execução do programa diretamente para outro ponto da PROCEDURE DIVISION, sendo considerada uma estrutura de desvio incondicional ou condicional.
Apesar de ser suportada em COBOL, o uso excessivo de GO TO
não é recomendado, pois pode dificultar a leitura e manutenção do programa. Em seu lugar, sempre que possível, deve-se utilizar PERFORM
, EVALUATE
ou IF
.
📌 Para que serve
-
Redirecionar a execução para outro parágrafo ou seção.
-
Implementar lógica condicional baseada em índices (em versão DEPENDING ON).
-
Utilizado em estruturas antigas ou programas legado.
🧾 Tipos de GO TO
✅ GO TO Incondicional
Transfere o controle diretamente para um parágrafo ou seção:
GO TO NOMEPARAGRAFO.
✅ GO TO Condicional (DEPENDING ON)
Transfere o controle para um dos parágrafos listados, com base no valor de uma variável numérica:
GO TO PARAG1, PARAG2, PARAG3 DEPENDING ON INDICE.
-
Se
INDICE = 1
, vai paraPARAG1
-
Se
INDICE = 2
, vai paraPARAG2
-
Se
INDICE = 3
, vai paraPARAG3
-
Se
INDICE
estiver fora do intervalo, segue o fluxo normalmente
⚠️ GO TO Alterado (com ALTER)
O GO TO
pode ser modificado dinamicamente com a instrução ALTER
. Prática altamente desencorajada, pois prejudica a estrutura do programa.
PARAG-1. GO TO PARAG-DESTINO.
ALTER PARAG-1 TO PROCEED TO PARAG-ALTERNATIVO.
Evite ao máximo essa abordagem — substitua por
EVALUATE
ouPERFORM
.
⚠️ Regras e restrições
Tipo | Observações |
---|---|
Incondicional | Desvia diretamente para outro ponto. Evite se possível. |
Condicional | Avalia um índice numérico e desvia para uma das opções. |
Alterado (ALTER) | Reconfigura o destino de um GO TO dinamicamente. Evite completamente. |
RECURSIVE |
O GO TO alterado não pode ser usado em programas recursivos. |
THREAD |
Também proibido em programas compilados com suporte a múltiplos threads. |
🔍 Exemplo prático
Exemplo com GO TO DEPENDING ON
WORKING-STORAGE SECTION.
01 INDICE PIC 9(01).
PROCEDURE DIVISION.
MOVE 2 TO INDICE.
GO TO OPCAO1, OPCAO2, OPCAO3 DEPENDING ON INDICE.
DISPLAY "Fim do programa".
STOP RUN.
OPCAO1.
DISPLAY "Opção 1".
STOP RUN.
OPCAO2.
DISPLAY "Opção 2".
STOP RUN.
OPCAO3.
DISPLAY "Opção 3".
STOP RUN.
❗ Recomendações
-
Prefira
PERFORM
para controle de fluxo estruturado. -
Use
EVALUATE
em decisões múltiplas. -
Reserve o
GO TO
apenas para situações muito específicas ou para manter compatibilidade com código legado.
✅ Conclusão
O comando GO TO
permite alterar o fluxo de execução de forma direta, mas deve ser usado com extrema cautela. Embora tenha sido amplamente utilizado em programas COBOL mais antigos, sua utilização hoje é desaconselhada em favor de práticas estruturadas que facilitam a manutenção e compreensão do código.