【问题标题】:Which of the following technique is better? [closed]以下哪种技术更好? [关闭]
【发布时间】:2011-10-04 16:14:38
【问题描述】:

假设我有三个条件:Condition1、Condition2、Condition3。 如果满足所有条件,则方法/函数返回 true,否则返回 false。

技巧一:

     function check(){
        if(Condition1 is true AND Condition2 is true AND Condition3 is true){
           return true;
        }
        return false;
     }

技巧二:

      function check(){
         if(Condition1 is false){
             return false;
         }
         if(Condition2 is false){
             return false;
         }
         if(Condition3 is false){
             return false;
        }

         return true;
      }

哪种技术更好?

【问题讨论】:

  • 这取决于您的上下文。在这种特殊情况下,我认为第一种技术更好。
  • 哪种方式更好?两个块的作用完全相同。
  • return condition1 ? (condition2 ? (condition 3 ? true : false) : false) : false可以是技术3吗?
  • @XaviLópez 当然可以,如果你想让人们的眼睛流血的话。
  • 作为回报 (Condition1 && Condition2 && Condition3);必须检查所有条件。但是在技术 2 中,如果出现错误条件,则要检查的条件数量可以从 1 到 3 不等。那么,在这种情况下,技术 2 会不会更好?

标签: javascript coding-style


【解决方案1】:

“更好”是主观的。

return (Condition1 && Condition2 && Condition3); // "Better" yet?

取决于非人为代码中的可读性和可维护性。

就我个人而言,我喜欢尽早返回,在有意义的时候这样做,这样可以提高可读性。

【讨论】:

  • +1。正如@porco 指出的那样,尽管考虑到整个条件以连词形式快速失效,这种方式客观上会更好
  • @XaviLópez 如果条件实际上可以如上准确地表示并且速度/可读性比值得权衡,那只会“客观地”更好。如果条件没有整齐地包含在单个变量中,我会说这并不好,因为无论如何您都需要封装它们。不过,很难从人为的例子中分辨出来:)
【解决方案2】:

我会使用技巧 3:

 function check() {
    return Condition1 && Condition2 && Condition3;
 }

无需与 true 进行比较,甚至无需 if 块。

【讨论】:

    【解决方案3】:
    function check(){
        return (Condition1 && Condition2 && Condition3);
    }
    

    我认为在方法中最好有一个唯一的返回语句。

    【讨论】:

    • 你为什么这么认为?而且没有AND是JS。
    • 哦,是的,我重用了他的示例,甚至没有考虑 :) 当然是 &&(现在已编辑)
    • @svick 我认为一般是正确的,但只有当方法的结构和目的通过单次返回更具可读性时。返回点越多,圈复杂度越高,推理就越困难。在紧握的手上,强迫单次返回,无论什么是邪恶的,并且会使事情变得同样难以思考。
    • 这里对方法中的多个返回点进行了冗长的讨论:stackoverflow.com/questions/36707/… - Dave 完美地总结了它。
    • @Harke:“但是在使用这种类型的返回时,无论如何都必须检查所有条件。”错误的。如果Condition1 为假,则不会评估更多条件。
    【解决方案4】:

    上面那个比较好,反正会短路。这意味着如果条件 1 为假,则不会检查条件 2 或条件 3,因此您不会使用第二种方法保存任何内容。

    另外,跳过“是真的”位,你可以这样做:

    return (Condition1 && Condition2 && Condition3)
    

    【讨论】:

      【解决方案5】:
      function check() {
        return condition1 && condition2 && condition3;
      }
      

      最简单的解决方案是找到布尔值并表达并返回。

      以下可能是最优化的解决方案

      function check() {
          var usefulConditionName = /* long condition */;
          var secondUsefulConditionName  = /* long condition */;
      
          return (usefulConditionName &&
              secondUsefulConditionName);
      }
      

      【讨论】:

        【解决方案6】:

        我通常认为代码和重复越少越好。我可能会去

        function check()
        {
            return Condition1  AND Condition2  AND Condition3 ;
        }
        

        【讨论】:

        • JS中没有AND
        【解决方案7】:

        两者都不是。最好的选择是直接返回表达式的值。不需要更多的冗长。此外,JavaScript 没有 AND 运算符,它有 &&

        function check() {
           return Condition1 && Condition2 && Condition3;
        }
        

        【讨论】:

          【解决方案8】:

          恕我直言,我更喜欢第一种技术,因为: 1- 更少的代码行 2- 更少的回报。

          但是对于这样的问题,每个人都可以有不同的看法。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-02-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-10-03
            • 1970-01-01
            • 2018-06-23
            相关资源
            最近更新 更多