为什么要使用短路代码?

Tim*_*tle 5 coding-style short-circuiting code-structure

相关问题:使用短路评估的好处,为什么语言不能使用短路评估?,有人可以解释这行代码吗?(逻辑和分配运营商)

关于使用短路代码的语言的好处有疑问,但我想知道程序员有什么好处?只是它可以使代码更简洁一点吗?还是有性能原因?

我不是在询问有关两个实体需要进行评估的情况,例如:

if($user->auth() AND $model->valid()){
  $model->save();
}
Run Code Online (Sandbox Code Playgroud)

对我而言,原因很清楚 - 既然两者都必须成立,那么如果用户无法保存数据,您可以跳过更昂贵的模型验证.

这对我来说也有明显的目的:

if(is_string($userid) AND strlen($userid) > 10){
  //do something
};
Run Code Online (Sandbox Code Playgroud)

因为strlen()使用非字符串值调用是不明智的.

我想知道的是当它不影响任何其他语句时使用短路代码.例如,从Zend Application默认索引页面:

defined('APPLICATION_PATH')
 || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
Run Code Online (Sandbox Code Playgroud)

这可能是:

if(!defined('APPLICATION_PATH')){
  define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
}
Run Code Online (Sandbox Code Playgroud)

或者甚至作为一个声明:

if(!defined('APPLICATION_PATH'))
  define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
Run Code Online (Sandbox Code Playgroud)

那么为什么要使用短路代码呢?仅仅因为使用逻辑运算符代替控制结构的"酷"因素?要合并嵌套的if语句?因为它更快?

JRL*_*JRL 4

对于程序员来说,较不详细的语法相对于其他更详细的语法的好处可以是:

  • 打字更少,因此编码效率更高
  • 更少的阅读量,因此更好的可维护性。

现在我只讨论不太冗长的语法在任何方面都不是棘手或聪明的,只是相同的公认的做法,但字符更少。

通常,当您在一种语言中看到特定的结构时,您希望您使用的语言也能具有这种结构,但之前甚至不一定意识到这一点。我脑海中浮现出一些例子:

  • Java 中的匿名内部类而不是传递指向函数的指针(更多的代码行)。
  • 在 Ruby 中,||= 运算符用于计算表达式,如果计算结果为 false 或为 null,则为其赋值。当然,你可以通过 3 行代码实现同样的事情,但是为什么呢?
  • 还有很多...