Regra
Não colocar atribuições dentro de condicionais.
Misturar atribuição e condição lógica faz com que o código propenso a erros
e mais difícil de compreender. Separar tarefas de lógicas lógicas.
Suportadas linguagens suportadas:** JavaScript, TypeScript, Python, PHPIntrodução
Operadores de atribuição dentro de instruções condicionais são uma fonte comum de bugs que compiladores e linters frequentemente não detectam. O erro clássico é usar = (atribuição) em vez de == ou === (comparação) em uma instrução if, mas o problema é mais profundo. Mesmo atribuições intencionais em condicionais criam código que é difícil de ler, revisar e depurar. Quando a atribuição e a avaliação ocorrem na mesma linha, os leitores precisam analisar mentalmente qual operação tem precedência e qual valor está sendo realmente testado.
Por que isso importa
Por que isso importa
Introdução de bug: Um erro de digitação alterando === para = não causará um erro de sintaxe, apenas alterará o comportamento silenciosamente. A condição avalia o valor atribuído (verdadeiro/falso), não o resultado da comparação.
Legibilidade do código: Leitores esperam que condicionais testem valores, não os modifiquem. Quando ambos ocorrem simultaneamente, os mantenedores devem rastrear quais variáveis estão sendo modificadas e quando.
Exemplos de código
❌ Não-conforme:
function processUser(userData) {
if (user = userData.user) {
console.log(`Processing user: ${user.name}`);
return user.id;
}
return null;
}
function validateInput(value) {
if (result = value.match(/^\d{3}-\d{2}-\d{4}$/)) {
return result[0];
}
return false;
}
Por que está errado: As atribuições dentro de condicionais tornam incerto se isso é intencional ou um erro de digitação. O primeiro exemplo pode ser um bug onde === era o pretendido, e o segundo mistura correspondência de regex com atribuição, tornando o fluxo do código difícil de seguir.
✅ Compatível:
function processUser(userData) {
const user = userData.user;
if (user) {
console.log(`Processing user: ${user.name}`);
return user.id;
}
return null;
}
function validateInput(value) {
const result = value.match(/^\d{3}-\d{2}-\d{4}$/);
if (result) {
return result[0];
}
return false;
}
Por que isso importa: Separar a atribuição da condicional torna a intenção cristalina. Os leitores veem imediatamente que usuário é extraído primeiro, depois testado. O resultado da correspondência regex é capturado, depois avaliado. Sem ambiguidade, sem sobrecarga cognitiva e erros de digitação como = vs. === tornar-se óbvio.
Conclusão
Manter as atribuições separadas das condicionais é uma regra simples que previne uma classe inteira de bugs. A sobrecarga cognitiva de analisar operações combinadas supera qualquer benefício percebido de concisão. Código claro e explícito, onde atribuição e avaliação são operações distintas, melhora a legibilidade, reduz bugs e torna a revisão de código mais eficaz.
.avif)
