(JavaScript) 最好是检查多个条件并在一个 returns 错误时立即结束执行?
(JavaScript) Best was to check for multiple conditions and end execution as soon as one returns false?
我目前正在开发一个值班应用程序。我需要计算哪个员工可以在每个月的每一天工作。这也必须“即时”更新,因为如果某人在第 1 天被分配工作,he/she 例如不能在第 2 天工作。
某人能否在一天工作取决于多种条件。
我的想法是,有一个“控制器”功能来检查是否有任何“条件”功能 returns false = 那意味着那个人那天不可用。
我喜欢简单地将 return 值相乘的方法,例如
const controller = (day, employee) => {
return (
cond1(day, employee) *
cond2(day, employee) *
cond3(day, employee) *
cond4(day, employee) *
cond5(day, employee)
)
}
因为 true == 1 和 false == 0 一旦一个条件为假,它 returns 0。但我认为这可能不是最有效的方法,因为它会检查所有条件。一旦一个条件为假,我正在寻找一种方法 return。
我可以使用 if-else 但这会很快变得不可读的条件地狱
如果第一个值为false
,&&
会短路。试试这个:
function foo() {
console.log('called foo');
return false;
}
function bar() {
console.log('called bar');
return true;
}
foo() && bar()
输出应该仅为called foo
。短路意味着布尔表达式只会计算它需要的数量;如果 &&
的左边为假,则表达式为假,右边不需要求值。
请注意,||
也会发生这种情况,但方式相反:如果表达式的左侧为 true,则不会计算右侧。
如果所有函数都采用与您的示例所暗示的完全相同的参数,您可以使用 [].every
,它也通过提前结束迭代来“短路”。不过,对于您的具体示例,我会警告不要这样做,因为即使其中一个 cond
函数采用不同的参数,它也会使事情难以维护。
[cond1, cond2, cond3, cond4, cond5].every((cond) => cond(day, employee))
我目前正在开发一个值班应用程序。我需要计算哪个员工可以在每个月的每一天工作。这也必须“即时”更新,因为如果某人在第 1 天被分配工作,he/she 例如不能在第 2 天工作。
某人能否在一天工作取决于多种条件。 我的想法是,有一个“控制器”功能来检查是否有任何“条件”功能 returns false = 那意味着那个人那天不可用。
我喜欢简单地将 return 值相乘的方法,例如
const controller = (day, employee) => {
return (
cond1(day, employee) *
cond2(day, employee) *
cond3(day, employee) *
cond4(day, employee) *
cond5(day, employee)
)
}
因为 true == 1 和 false == 0 一旦一个条件为假,它 returns 0。但我认为这可能不是最有效的方法,因为它会检查所有条件。一旦一个条件为假,我正在寻找一种方法 return。
我可以使用 if-else 但这会很快变得不可读的条件地狱
false
,&&
会短路。试试这个:
function foo() {
console.log('called foo');
return false;
}
function bar() {
console.log('called bar');
return true;
}
foo() && bar()
输出应该仅为called foo
。短路意味着布尔表达式只会计算它需要的数量;如果 &&
的左边为假,则表达式为假,右边不需要求值。
请注意,||
也会发生这种情况,但方式相反:如果表达式的左侧为 true,则不会计算右侧。
如果所有函数都采用与您的示例所暗示的完全相同的参数,您可以使用 [].every
,它也通过提前结束迭代来“短路”。不过,对于您的具体示例,我会警告不要这样做,因为即使其中一个 cond
函数采用不同的参数,它也会使事情难以维护。
[cond1, cond2, cond3, cond4, cond5].every((cond) => cond(day, employee))