关于javascript:以下哪项技术更好?

Which of the following technique is better?

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

技术一:

1
2
3
4
5
6
     function check(){
        if(Condition1 is true AND Condition2 is true AND Condition3 is true){
           return true;
        }
        return false;
     }

技术二:

1
2
3
4
5
6
7
8
9
10
11
12
13
      function check(){
         if(Condition1 is false){
             return false;
         }
         if(Condition2 is false){
             return false;
         }
         if(Condition3 is false){
             return false;
        }

         return true;
      }

哪种技术更好?


"更好"是主观的。

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

取决于非人工代码中可读性和可维护性更高的内容。

就我个人而言,我是一个尽可能早返回的粉丝,当这样做是有意义的,并且它增加了可读性。


我会使用技巧3:

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

不需要与true进行比较,甚至不需要使用if块。


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

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


上面的那个比较好,反正会短路。这意味着如果Condition1为false,它将不会检查Condition2或Condition3,因此不使用第二个方法保存任何内容。

另外,跳过"是真的"位,您只需执行以下操作:

1
return (Condition1 && Condition2 && Condition3)

我更喜欢第一种技巧,因为:少一行代码少2的回报。

但每个人对这样的问题都有不同的看法。


两者都不。最好的选择是直接返回表达式的值。没有必要再赘述了。另外,javascript没有AND操作符,它有&&操作符。

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


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

1
2
3
4
function check()
{
    return Condition1  AND Condition2  AND Condition3 ;
}


1
2
3
function check() {
  return condition1 && condition2 && condition3;
}

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

最理想的解决方案是:

1
2
3
4
5
6
7
function check() {
    var usefulConditionName = /* long condition */;
    var secondUsefulConditionName  = /* long condition */;

    return (usefulConditionName &&
        secondUsefulConditionName);
}