如果块“if”返回,我们是否需要“else”构造?

时间:2016-03-14 13:41:31

标签: java

据我所知,以下方法也是如此,但哪种变体更好,为什么?

public boolean method() {
      if (condition) {
          return otherMethod();
      } else {
          return true;
      }
}     

public boolean method() {
      if (condition) {
          return otherMethod();
      } 
      return true;
}  

或者这可能是更好的变种?

public boolean method() {
     return condition ? otherMethod() : true;
}

4 个答案:

答案 0 :(得分:5)

我对此有一个非常强烈的意见,即在这种情况下使用else块是一种糟糕的风格。

一旦逻辑变得足够复杂,使用else将极大地妨碍可读性。

例如:

if (cond1)
   then return
else
    // Do some processing
    if (cond2)
        then return
    else
         // Do some processing
         if (cond3)
             ....

所以你最终得到一个深层嵌套的结构,这完全没必要,因为它等同于:

if (cond1)
   then return
// Do some processing
if (cond2)
   then return
// Do some processing
if (cond3)
   ....

答案 1 :(得分:1)

同样的结果,不同的风格,只是品味的问题。我更喜欢第二种解决方案,因此return语句与实际语句(如果在这种情况下)相关并且冗余度较低。此外,“Else”语句增加了反转if条件的复杂性,这使得它的可读性降低。

答案 2 :(得分:1)

我更喜欢第二种选择。

这是我为自己使用的一些理由:

1)减少嵌套代码并降低代码复杂性。

2)允许提前退货:

public boolean isValidUser(User user) {
    if (user == null) {
        return false;
    }

    String details = getUserDetails(user);
    if (details == null) {
        return false;
    }

    ...

    return true
}

VS

public boolean isValidUser(User user) {
    if (user == null) {
        return false;
    } else {
        String details = getUserDetails(user);
        if (details == null) {
            return false;
        } else {
            ...
            return true;
        }
    }
}

答案 3 :(得分:0)

绝对一样。它只是一种不同的风格。采用你喜欢的那个。

就个人而言,我通常更喜欢第二种选择,因为如果代码非常长,则不会在块中缩进。从我的角度来看,它更具可读性。

想象

public boolean myFunction() {   
    if (test) {
        return true;
    }
    ...
    ...
    ...
    ...
    // Very long code
    return false;
}

而不是

public boolean myFunction() {   
    if (test) {
        return true;
    } else {
        ...
        ...
        ...
        ...
        // Very long code
        return false;
    }
}