Aikido

Por que evitar o uso de 'goto' no código para manutenibilidade e segurança

Legibilidade

Regra
Evite o uso de goto.
O goto cria cria instruções não 
não estruturado que torna o código difícil de de e manter.

Idiomas suportados: 45+

Introdução

goto salta diretamente para pontos arbitrários no código, quebrando o fluxo natural de execução. Isso torna muito difícil o raciocínio sobre o estado, o tratamento de erros e o desempenho. Manter código com goto aumenta o risco de bugs sutis e comportamento inesperado. Alternativas estruturadas produzem código previsível, legível e de fácil manutenção.

Por que isso importa

Implicações de segurança: Saltos não estruturados podem ignorar verificações de validação ou autorização, potencialmente expondo operações sensíveis.

Impacto no desempenho: Cadeias de goto complexas dificultam a criação de perfis e a otimização, aumentando o risco de caminhos de execução ineficientes.

Manutenibilidade do código: O `goto` cria um fluxo de controle tipo espaguete que é difícil de refatorar ou estender com segurança.

Superfície de ataque: Saltos inadequados podem expor inadvertidamente caminhos de código inseguros ou ignorar seções críticas de segurança.

Exemplos de código

❌ Não-conforme:

<?php
for ($i = 0; $i < 10; $i++) {
    if ($i == 3) {
        goto end;
    }
    echo "$i\n";
}

end:
echo "Jumped out!";
?>

Por que está errado: As instruções goto criam loops não estruturados, dificultando a compreensão do fluxo ou a inserção segura de lógica adicional.

✅ Compatível:

<?php
for ($i = 0; $i < 10; $i++) {
    if ($i == 3) {
        break;
    }
    echo "$i\n";
}

echo "Jumped out!";
?>

Por que isso importa: Usar um loop for torna o fluxo de controle explícito, previsível e manutenível, preservando um comportamento idêntico.

❌ Não-conforme:

function process(items) {
    for (const item of items) {
        if (!item) {
            console.error('Invalid item detected');
            return false;
        }
    }
    return true;
}

Por que está errado: saltos 'goto' obscurecem o caminho de erro e a execução normal, dificultando o acompanhamento ou a extensão.

✅ Compatível:

function process(items) {
    for (const item of items) {
        if (!item) {
            console.error('Invalid item detected');
            return false;
        }
    }
    return true;
}

Por que isso importa: Loops estruturados e retornos antecipados tornam a lógica clara, o tratamento de erros explícito e a manutenção mais fácil.

Conclusão

Evite `goto` para manter um código estruturado, legível e seguro. Use loops, funções e retornos antecipados para um fluxo de controle previsível. Isso reduz o custo de manutenção, previne bugs sutis e garante caminhos de execução seguros.

FAQs

Dúvidas?

O goto é aceitável em código moderno?

Raramente. Apenas em linguagens de baixo nível para operações críticas de desempenho semelhantes a assembly. Código de alto nível deve usar fluxo de controle estruturado.

Como substituir goto em loops complexos?

Utilize break, continue, early returns ou funções auxiliares para estruturar o fluxo sem saltos arbitrários.

Evitar o uso de goto pode melhorar a segurança?

Sim. O fluxo de controle explícito garante que as validações e verificações de segurança não sejam acidentalmente ignoradas.

Evitar o uso de goto afeta o desempenho?

Não. Loops e funções estruturados são eficientes e mais fáceis de otimizar do que saltos arbitrários.

Fique seguro agora

Proteja seu código, Cloud e runtime em um único sistema centralizado.
Encontre e corrija vulnerabilidades rapidamente de forma automática.

Não é necessário cartão de crédito | Resultados da varredura em 32 segundos.