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
Os operadores de atribuição dentro de declarações condicionais são uma fonte comum de erros que os compiladores e linters muitas vezes 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 devem analisar mentalmente qual operação tem precedência e qual valor está realmente sendo testado.
Porque é importante
Porque é importante
Introdução de erros: Um erro tipográfico que altera === para = não causa um erro de sintaxe, apenas altera silenciosamente o comportamento. A condição é avaliada para o valor atribuído (verdadeiro/falso), não para o resultado da comparação.
Legibilidade do código: Os leitores esperam que as condicionais testem valores, não os modifiquem. Quando ambos acontecem 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 das condicionais não deixam claro se isso é intencional ou um erro de digitação. O primeiro exemplo pode ser um erro onde === foi intencional, e o segundo mistura correspondência de regex com atribuição, tornando o fluxo de código difícil de seguir.
Conformidade:
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;
}
Porque é que isto é importante: Separar a atribuição da condicional torna a intenção muito clara. Os leitores vêem imediatamente que utilizador é extraído primeiro e depois testado. O resultado da correspondência regex é capturado e depois avaliado. Sem ambiguidade, sem sobrecarga cognitiva e erros de digitação como = vs === tornam-se evidentes.
Conclusão
Manter as atribuições separadas das condicionais é uma regra simples que evita toda uma classe de erros. A sobrecarga cognitiva de analisar operações combinadas supera qualquer benefício de brevidade percebido. Um código claro e explícito em que a atribuição e a avaliação são operações distintas melhora a legibilidade, reduz os erros e torna a revisão do código mais eficaz.
.avif)
