Regla
No coloque tareas dentro de condicionales.
Mezclar asignación y condición lógica hace que código propenso a errores
y más difícil de de entender. Separe tareas de lógica lógicas.
Idiomas compatibles lenguajes:** JavaScript, TypeScript, Python, PHPIntroducción
Los operadores de asignación dentro de las sentencias condicionales son una fuente común de errores que los compiladores y linters a menudo pasan por alto. El error clásico es usar = (asignación) en lugar de == o === (comparación) en una sentencia if, pero el problema es más profundo. Incluso las asignaciones intencionales en condicionales crean código difícil de leer, revisar y depurar. Cuando la asignación y la evaluación ocurren en la misma línea, los lectores deben analizar mentalmente qué operación tiene precedencia y qué valor se está probando realmente.
Por qué es importante
Por qué es importante
Introducción de errores: Un error tipográfico que cambia === con = no causará un error de sintaxis, solo cambia el comportamiento de forma silenciosa. La condición evalúa el valor asignado (verdadero/falso), no el resultado de la comparación.
Legibilidad del código: Los lectores esperan que las condicionales prueben valores, no que los modifiquen. Cuando ambos ocurren simultáneamente, los mantenedores deben rastrear qué variables se están modificando y cuándo.
Ejemplos de código
❌ No 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 qué está mal: Las asignaciones dentro de condicionales hacen que no esté claro si esto es intencional o un error tipográfico. El primer ejemplo podría ser un error donde se pretendía ===, y el segundo mezcla la coincidencia de expresiones regulares con la asignación, haciendo que el flujo del código sea difícil de seguir.
✅ Conforme:
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 qué esto importa? Separar la asignación de la condición deja la intención muy clara. Los lectores ven inmediatamente que usuario se extrae primero y luego se prueba. El resultado de la coincidencia de la expresión regular se captura y luego se evalúa. Sin ambigüedad, sin sobrecarga cognitiva, y errores tipográficos como = vs. === se hace evidente.
Conclusión
Mantener las asignaciones separadas de las condicionales es una regla sencilla que previene toda una clase de errores. La sobrecarga cognitiva de analizar operaciones combinadas supera cualquier beneficio percibido de brevedad. Un código claro y explícito, donde la asignación y la evaluación son operaciones distintas, mejora la legibilidad, reduce los errores y hace que la revisión del código sea más efectiva.
.avif)
