if和if-else之间有什么明显的区别吗?

Dre*_*rew 8 java maintainability coding-style

鉴于以下代码片段,是否有任何明显的差异?

public boolean foo(int input) {
   if(input > 10) {
       doStuff();
       return true;
   }
   if(input == 0) {
       doOtherStuff();
       return true;
   }

   return false;
}
Run Code Online (Sandbox Code Playgroud)

public boolean foo(int input) {
   if(input > 10) {
      doStuff();
      return true;
   } else if(input == 0) {
      doOtherStuff();
      return true;
   } else {
      return false;
   }
}
Run Code Online (Sandbox Code Playgroud)

或者使用这段代码,单退出原则会更好吗?

public boolean foo(int input) {
   boolean toBeReturned = false;
   if(input > 10) {
      doStuff();
      toBeReturned = true;
   } else if(input == 0) {
      doOtherStuff();
      toBeReturned = true;
   }

   return toBeReturned;
}
Run Code Online (Sandbox Code Playgroud)

有没有明显的性能差异?你觉得一个人或多或少比其他人更易于维护/阅读吗?

Pet*_*uza 10

在第二个例子中,您非常清楚地说明两个条件是互斥的.
对于第一个,它不是那么清楚,并且在(不太可能的)事件中,input在两个if之间添加赋值,逻辑将改变.
假设将来有人在input = 0第二个之前添加if.
当然这不太可能发生,但是如果我们在这里谈论可维护性,如果 - 否则清楚地表明存在相互排斥的条件,而一堆ifs则没有,并且它们彼此之间没有那么依赖. - 块.

编辑:现在我看到,在这个特定的例子中,return子句强制相互排他性,但同样,我们讨论的是可维护性和可读性.

无论如何,关于性能,如果这是用Java编码的,你不应该关心几个if块的性能,如果它是在一个非常慢的硬件中嵌入C,也许,但肯定不是用java.