布尔级联?这种模式的真正用语是什么?

时间:2009-11-06 20:09:15

标签: javascript boolean

请考虑以下功能正文:

var isValidated = true;
$(selector1).each(function(){
    //do validation with local f()...
    isValidated = f() && isValidated;
});

$(selector2).each(function(){
    //do validation with local f()...
    isValidated = f() && isValidated;
});

$(selector3).each(function(){
    //do validation with local f()...
    isValidated = f() && isValidated;
});

return isValidated;

我对isValidated的进展的描述是布尔级联 - 但是必须有一个官方的,计算机科学的术语。它是什么?为了澄清,这里的想法是让每个$()块运行---但是当这些块中的任何一个块验证失败时,此失败的结果必须在所有块上返回false({{1 }})。因此,像许多程序员一样,我使用某种模式,但我们常常不知道它叫什么。那么这种模式是否有用呢?

3 个答案:

答案 0 :(得分:10)

Boolean Logic。 (并查看“链接操作”部分)。

答案 1 :(得分:3)

不确定这是否是一个命名模式本身,但我只是想指出一个小观察...因为你只是返回布尔值,最好切换你的检查,以便在第一次失败后逻辑如果不必要地运行其他功能,将简单地短路为错误:

isValidated = isValidated  && f();

确保您仍然运行每个f()的唯一原因是,他们正在执行类似于为用户标记有错误的UI字段的操作。如果它们只是在验证,那么一旦外部检查为假,就不需要运行它们。

答案 2 :(得分:1)

我假设您使用.each(),您也可以访问.inject()函数,这是我建议您使用可枚举构建单个值时使用的函数。

function validated(a) {
  return a.inject(true, function(acc, el){ return(acc && f()); });
}

return validated($(selector1)) && validated($(selector2)) && validated($(selector3));