我一直想知道这个简写,如果我们可以称之为,这是一个公认的PHP开发人员编码的做法:
foo() && bar();
而不是
if( foo() ) {
bar();
}
虽然IMO的单行代码更整洁,但我没有看到它在任何地方使用过。
答案 0 :(得分:3)
这是许多语言的开发人员的常见做法。从技术上讲,它没有任何问题,但从它在StackOverflow上显示的次数来判断,我会继续说它是“仅在它是唯一有意义的东西时才使用”。大多数人都不期望它。
那就是说,这完全有效:
foo()?bar()?bat():zonk():baz();
按原样
foo() && bar() && baz();
请记住:
function foo(){return true;}
function bar(){echo "bar";}
function baz(){echo "baz"; return 2;}
echo foo()||foo()?baz():baz(); // baz2
答案 1 :(得分:1)
就个人而言,我认为没有错。它相当普遍,所以大多数PHP程序员都会理解它,就像他们理解扩展版本一样,使它完全可以接受。
答案 2 :(得分:1)
最重要的部分是您编写易于阅读的代码。例如,使用foo()
和bar()
这样的函数名称是完全没用的,所以很难说你要比较哪两个更好。
接下来,if示例也有一些相当大的缺陷:
if
是一种语言结构,但您可以像函数一样使用它。另一个建议是:
if (foo()) {
但是你想比较两者:代码总是在它的上下文中。可读代码使用它的上下文。你的两个建议都是有效的,关键是你可以从代码中读出含义:
conditionMet() && gotForIt();
if (conditionMet()) goForIt();
自己决定。只是不要从一行混合到另一行,所以在整个代码中保留一种风格。
答案 3 :(得分:1)
foo() && bar();
是一个布尔表达式,所以如果你不把它放在一个布尔上下文(if
,while
等条件)中就错了。
代码必须告诉正在解决问题的“故事”,使用此快捷方式并不能说明问题。这是一个丑陋的黑客,它不优雅。
如果您认为它“整洁”,那么您尚未达到代码意味着的点,而不是代码。