O comando ALTER é utilizado para modificar dinamicamente o destino de uma instrução GO TO durante a execução do programa. Ele altera o fluxo do controle no tempo de execução, redirecionando o GO TO para outro parágrafo.

⚠️ Atenção: seu uso é desencorajado em práticas modernas de programação COBOL, pois dificulta a legibilidade e manutenção do código. Prefira comandos estruturados como EVALUATE ou PERFORM.

🧾 Sintaxe

ALTER nome-procedimento-1 TO [PROCEED TO] nome-procedimento-2.

🧠 O que faz

  • Altera o comportamento do GO TO presente no parágrafo nome-procedimento-1, redirecionando-o para nome-procedimento-2.

  • A partir da execução do ALTER, sempre que nome-procedimento-1 for chamado, o GO TO irá para o novo destino definido.

🎯 Exemplo prático

✅ Antes do ALTER

100-INICIO. 
    GO TO 200-ETAPA1.

200-ETAPA1.
    DISPLAY "Etapa 1".
    STOP RUN.

✅ Após o ALTER

100-INICIO.
    ALTER 100-INICIO TO PROCEED TO 300-ETAPA2.
    GO TO 100-INICIO.

300-ETAPA2.
    DISPLAY "Etapa 2".
    STOP RUN.

Nesse exemplo, a primeira vez que 100-INICIO for executado, o controle vai para 200-ETAPA1. Após o ALTER, as próximas chamadas a 100-INICIO redirecionarão para 300-ETAPA2.

⚠️ Regras e limitações

  • O procedure-name-1 deve conter apenas um GO TO direto, sem DEPENDING ON.

  • O procedure-name-2 deve ser um parágrafo ou seção válida.

  • O ALTER não pode ser usado em programas com o atributo RECURSIVE.

  • Evite usar em código novo – prefira soluções estruturadas com EVALUATE, PERFORM e IF.

🚫 Boas práticas

O uso de ALTER é considerado obsoleto e não estruturado. A maioria dos compiladores modernos ainda aceita por compatibilidade, mas sua utilização deve ser evitada sempre que possível.

Recomenda-se reescrever a lógica usando PERFORM ... THRU ou EVALUATE.

✅ Conclusão

A instrução ALTER mostra como era o COBOL em sua forma mais procedural e dinâmica. No entanto, para código moderno e legível, o ideal é evitar seu uso e aplicar estruturas mais seguras e claras.