当我偶然发现类似这样的构造时,我正在重构一些旧代码:
// function bar() returns a value
// if the value is an instance of customException class, terminate with error code
// else process the regular data
$foo = bar();
checkForException($foo) && exit($foo->errorCode());
process($foo);
现在看起来很奇怪,这要短得多
$foo=bar();
if(checkForException($foo)) {
exit($foo->errorCode();
}
else {
process($foo);
}
然后更具可读性(至少在最初的惊喜之后)
$foo=bar();
(checkForException($foo)) ? exit($foo->errorCode()) : process($foo);
虽然更短的代码并不一定意味着更易读的代码,但我发现它位于上述两种“标准”方式的中间。
换句话说,而不是
if($foo) {
bar();
}
else {
// there is no real reason for this to exist, since
// I have nothing to write here, but I want to conform
// to the general coding practices and my coding OCD
}
可以简单地写
$foo && bar();
那么,这背后的原因是什么?是否可以像“不要重新发明轮子,写更易读的 if/else,如果你真的想缩短它,这就是三元运算符的用途”那么简单?
编辑:请记住,上面的代码是从原始代码快速派生出来的,只是一个使用“短路”代码的例子。如果可以,请不要建议代码改进,因为这不是问题的预期结果。
示例 2
userCheckedTheBox($user) && displayAppropriateInfo();