Aikido

Por que você deve remover código comentado da sua base de código

Legibilidade

Regra
Remover comentários código comentados

comentados código cria ruído, torna-se obsoleto, 
e pertence ao versão histórico histórico, não o base de código.

Introdução

Código comentado se acumula quando os desenvolvedores não têm certeza se precisarão da lógica antiga mais tarde. Alguém comenta uma função "apenas por precaução" em vez de excluí-la, e ela permanece lá para sempre. Ninguém sabe se este código ainda funciona, por que foi desativado ou se é seguro removê-lo. A base de código se enche de fantasmas de implementações passadas que desviam a atenção do que realmente roda em produção.

Por que isso importa

Manutenibilidade do código: Código comentado força os leitores a filtrar mentalmente o que é real versus o que está inativo. Durante a revisão de código, não é possível saber se esses blocos são experimentos temporários, opções importantes de rollback ou resquícios esquecidos de anos atrás. Esse ruído dificulta a compreensão da lógica real, a localização de seções de código relevantes e a revisão significativa das alterações.

Implicações de segurança: Verificações de autenticação, lógica de validação ou recursos de segurança comentados revelam que essas proteções existiam, mas foram desabilitadas deliberadamente. Se o código comentado contiver credenciais, chaves de API ou URLs internas, você estará enviando esses dados sensíveis em texto simples. Atacantes que revisam sua base de código veem exatamente quais medidas de segurança você considerou e removeu.

Confusão no controle de versão: Os diffs do Git ficam poluídos com blocos comentados que não estão realmente mudando. Quando você precisa rastrear quando a lógica mudou ou por que uma funcionalidade funciona de certa maneira, alternativas comentadas obscurecem o histórico real. A busca na base de código retorna correspondências em código morto, desperdiçando tempo investigando caminhos que não são executados.

Exemplos de código

❌ Não-conforme:

async function createUser(userData) {
    // const hashedPassword = await bcrypt.hash(userData.password, 10);

    const user = await db.users.create({
        email: userData.email,
        password: userData.password,
        // password: hashedPassword,
        role: userData.role || 'user'
    });

    // await sendWelcomeEmail(user.email);
    // await notifyAdmins(user);

    // Old validation approach
    // if (!isValidEmail(user.email)) {
    //     throw new Error('Invalid email');
    // }

    return user;
}

Por que está errado: O hash de senha comentado revela que as senhas são armazenadas em texto simples, uma vulnerabilidade de segurança crítica. Ninguém sabe se o e-mail de boas-vindas e a notificação do administrador devem ser ativados, e a validação antiga sugere que a validação de e-mail pode estar faltando.

✅ Compatível:

async function createUser(userData) {
    if (!isValidEmail(userData.email)) {
        throw new Error('Invalid email');
    }

    const hashedPassword = await bcrypt.hash(userData.password, 10);

    const user = await db.users.create({
        email: userData.email,
        password: hashedPassword,
        role: userData.role || 'user'
    });

    await sendWelcomeEmail(user.email);
    await notifyAdmins(user);

    return user;
}

Por que isso importa: A função é clara e completa, mostrando exatamente o que é executado em produção. A validação de e-mail é executada primeiro, as senhas são devidamente hashed, e todas as notificações são enviadas sem ambiguidade sobre o que está habilitado.

Conclusão

Exclua o código em vez de comentá-lo. Seu sistema de controle de versão preserva cada linha escrita, acessível através de git log e git blame quando você precisar. Manter código comentado no repositório apenas cria ruído que obscurece a lógica real e torna sua base de código mais difícil de navegar.

FAQs

Dúvidas?

E se eu precisar da implementação antiga para rollback?

Utilize feature flags ou branches de controle de versão, não comentários. Se você puder reverter para a lógica antiga, implemente-a por trás de uma feature flag que você pode alternar. Para mudanças permanentes, exclua o código antigo e confie no histórico do Git. Você sempre pode recuperar código excluído com git log -p ou git show quando necessário.

Como lidar com código experimental durante o desenvolvimento?

Mantenha experimentos em branches separadas ou utilize feature flags. Se você estiver testando duas abordagens, crie uma branch para cada ou use uma flag de configuração para alternar entre elas. Código comentado em branches principais sugere que você não tem certeza do que deve ir para produção, o que é um problema de planejamento, não de controle de versão.

E quanto a desabilitar temporariamente o código durante a depuração?

Isso é aceitável para sessões de depuração locais, mas nunca o comite. Use git add -p para revisar e excluir o código de depuração comentado antes de commitar. Se precisar desabilitar o código temporariamente em toda a equipe, use feature flags ou configuração em vez de comentários.

Devo remover notas explicativas comentadas também?

Não, esta regra visa blocos de código comentados, não comentários de documentação. Comentários explicativos que descrevem por que ou como algo funciona são valiosos. A questão são blocos de código executável comentados que podem ou não ser mais relevantes.

E se o código comentado documentar abordagens de implementação antigas?

Documente a abordagem em um comentário que a descreva, não preservando código morto. Escreva 'anteriormente usava a abordagem X, mudou para Y porque Z' em vez de manter ambas as implementações comentadas. O contexto histórico pertence a mensagens de commit e documentos de design, não a blocos de código dormentes.

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.