Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

177
Vistas
¿Cómo refactorizar si se bloquea con condiciones repetidas?

Digamos que tengo unas 6 condiciones (af) y si las declaraciones se enumeran a continuación. Como puede ver, hay un patrón para estas declaraciones if. Cada próxima declaración if tiene casi las mismas condiciones que la anterior, pero la primera condición que se usó anteriormente se elimina.

 if(a && b && c && d && e && f) return 5; if(b && c && d && e && f) return 4; if(c && d && e && f) return 3; if(d && e && f) return 2; if(e && f) return 1; if (f) return 0; return -1;

Creo que no hay necesidad de tener tantas condiciones elaboradas, especialmente porque hay casos que introducen algunas comprobaciones de condiciones redundantes y preferiría evitar eso. Intenté reescribirlo, pero solo encontré algo como esto:

 let res = -1; if(f) { res = 0; if(e) { res = 1; if(d) { res = 2; if(c) { res = 3; } if(b) { res = 4; if(a) { res = 5; } } } } } return res;

De esta manera, ya no tengo verificaciones de condición redundantes, pero esta solución aún parece demasiado complicada. ¿Hay algunas formas inteligentes de reescribirlo para que pueda tener una solución simple sin controles redundantes?

about 4 years ago · Santiago Gelvez
2 Respuestas
Responde la pregunta

0

Sus declaraciones if anidadas no son tan malas: eliminan la duplicación de manera bastante eficiente y crean una estructura lineal. Puede acortar aún más el código usando un bucle:

 let res = -1; for (const flag of [f, e, d, c, b, a]) { if (flag) res++; else break; } return res;

Esto aún evalúa todas las condiciones por adelantado, por lo que si es costoso calcularlas, es posible que desee utilizar funciones que pueda evaluar cuando sea necesario:

 let res = -1; for (const getFlag of [()=>f, ()=>e, ()=>d, ()=>c, ()=>b, ()=>a]) { if (getFlag()) res++; else break; } return res;

Si las condiciones son baratas, y también sabe que si una es falsa, todas las demás también son falsas, ni siquiera necesita break el ciclo. Luego se puede simplificar en una sola expresión:

 return -1 + f + e + d + c + b + a;
about 4 years ago · Santiago Gelvez Denunciar

0

Coloque las condiciones en una matriz, junto con los resultados.

 const conds = [[a, 5], [b, 4], [c, 3], [d, 2], [e, 1], [f, 0]]; while (conds.length) { if (conds.every(([cond]) => cond)) { return conds[1]; } conds.shift(); } return -1;
about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda