Actualmente estoy trabajando en una aplicación de turno de servicio. Necesito calcular qué empleado puede trabajar en cada día particular del mes. Esto también debe actualizarse "sobre la marcha", ya que si alguien es asignado a trabajar el día 1, por ejemplo, no podrá trabajar el día 2.
Si alguien puede trabajar en un día o no depende de múltiples condiciones. Mi idea es tener una función de "controlador" que verifique si alguna de las funciones de "condiciones" devuelve falso = eso significa que la persona no está disponible para ese día.
Me gusta una forma simplemente multiplicando los valores de retorno como
const controller = (day, employee) => { return ( cond1(day, employee) * cond2(day, employee) * cond3(day, employee) * cond4(day, employee) * cond5(day, employee) ) }dado que verdadero == 1 y falso == 0, devuelve 0 tan pronto como una condición es falsa. Pero pensé que esta podría no ser la forma más eficiente porque verifica todas las condiciones. Estoy buscando una manera de regresar tan pronto como una condición sea falsa.
Podría usar if-else pero esto se convertiría en una condición ilegible, muy rápido
&& provocará un cortocircuito si el primer valor es false . Probar esto:
function foo() { console.log('called foo'); return false; } function bar() { console.log('called bar'); return true; } foo() && bar() La salida solo debe called foo . El cortocircuito significa que la expresión booleana solo evaluará tanto como sea necesario; si el lado izquierdo de && es falso, entonces la expresión es falsa y no es necesario evaluar el lado derecho. Tenga en cuenta que esto también sucede con || , pero al revés: si el lado izquierdo de la expresión es true , el lado derecho no se evalúa.
Si todas las funciones toman exactamente los mismos argumentos que su ejemplo implica, podría usar [].every , que también "cortocircuita" al finalizar la iteración antes de tiempo. Sin embargo, advertiría contra esto para su ejemplo específico, ya que puede dificultar el mantenimiento de las cosas en el caso de que incluso una de esas funciones cond tome parámetros diferentes.
[cond1, cond2, cond3, cond4, cond5].every((cond) => cond(day, employee))