【问题标题】:Boolean Concatenation? What's the real term for this pattern?布尔连接?这种模式的真正术语是什么?
【发布时间】:2009-11-06 20:09:14
【问题描述】:

请考虑以下函数体:

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;

我对@9​​87654322@ 进度的描述是布尔连接——但这个东西必须有一个官方的计算机科学术语。它是什么?澄清一下,这里的想法是让每个 $() 块运行——但是当这些块中的任何一个验证失败时,此失败的结果必须在所有块上返回 false (true && true && false == false)。所以,像许多程序员一样,我正在使用某种模式,但我们通常不知道它叫什么。那么这种模式有什么用处吗?

【问题讨论】:

    标签: javascript boolean


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    不确定这本身是否是一个命名模式,但我只是想指出一个小观察...由于您只是返回布尔值,因此最好切换检查,以便在第一次失败后逻辑将简单地短路为 false 而无需运行其他功能:

    isValidated = isValidated  && f();
    

    确保您仍然运行每个 f() 的唯一原因是它们是否正在为用户执行诸如标记带有错误的 UI 字段之类的操作。如果它们只是验证,则无需在外部检查为假时运行它们。

    【讨论】:

    • 如果您的函数既要执行验证又要标记 UI,那么它们做的事情太多了。这些是单独的问题。
    【解决方案3】:

    根据您对 .each() 的使用,我假设您还可以访问 .inject() 函数,当您从可枚举中构建单个值时,我建议您使用该函数。

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

    【讨论】:

    • @mattgillooly.com:我喜欢你的方法,因为它避免了在不同的函数之间共享像 isValidated 这样的变量......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多