Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

176
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!