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 sentencias condicionales son una fuente común de errores que los compiladores y los linters suelen pasar por alto. El error clásico es utilizar = (asignación) en lugar de == o === (comparación) en una sentencia if, pero el problema es más profundo. Incluso las asignaciones intencionadas en condicionales crean código difícil de leer, revisar y depurar. Cuando la asignación y la evaluación se producen en la misma línea, los lectores deben analizar mentalmente qué operación tiene prioridad y qué valor se está comprobando realmente.
Por qué es importante
Por qué es importante
Introducción de errores: Un error tipográfico que cambia === a = no causará un error de sintaxis, sólo cambia silenciosamente el comportamiento. 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 comprueben los valores, no que los modifiquen. Cuando ambas cosas ocurren simultáneamente, los responsables del mantenimiento deben saber qué variables se modifican y cuándo.
Ejemplos de códigos
❌ 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 los condicionales hacen que no esté claro si esto es intencionado o un error tipográfico. El primer ejemplo podría ser un error donde === era la intención, y el segundo mezcla la concordancia regex con la asignación, haciendo que el flujo de 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é es importante: Separar la asignación del condicional aclara la intención. Los lectores ven inmediatamente que usuario se extrae primero y luego se comprueba. El resultado de la coincidencia regex se captura y luego se evalúa. Sin ambigüedad, sin sobrecarga cognitiva y sin errores tipográficos como = vs === se hacen evidentes.
Conclusión
Mantener las asignaciones separadas de las condicionales es una regla sencilla que evita 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 en el que 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 eficaz.
.avif)
