你使用三元运算符的编码风格?
如果它很短,我保持在一行。 最近我一直在使用这种风格的更长或嵌套的三元运算符expression式。 一个人为的例子:
$value = ( $a == $b ) ? 'true value # 1' : ( $a == $c ) ? 'true value # 2' : 'false value';
个人喜欢你使用哪种风格,或者find最可读的?
编辑:( 关于何时使用三元操作符)
我通常避免使用2级以上的深层三元运算符。 我倾向于更喜欢2级深层三元运算符超过2级别,否则,当我在PHP模板脚本回显variables。
三元运算符通常是要避免的,但是这个forms可以是非常可读的:
result = (foo == bar) ? result1 : (foo == baz) ? result2 : (foo == qux) ? result3 : (foo == quux) ? result4 : fail_result;
这样,条件和结果就会保持在同一条线上,并且很容易理解和理解正在发生的事情。
我尽量不要使用三元运算符来编写嵌套条件。 它反驳了可读性,并没有提供超过使用条件的额外价值。
只有它能适合一条线,而且它的含义很清楚,我才会使用它:
$value = ($a < 0) ? 'minus' : 'plus';
就个人而言,如果它适合一行,我只使用三元运算符。 如果需要跨度,那么是时候了
if else if else
PHP嵌套三元运算符行为不同。
该语法通过了以下所有testing。 基于http://deadlytechnology.com/web-development-tips/php-ternary-syntax/
$myvar = ($x == $y) ?(($x == $z)?'both':'foo') :(($x == $z)?'bar':'none');
。
请参阅: http : //au.php.net/ternary
Example#3“非明显的三元行为”解释了为什么以下不能在PHP中工作。
$x = 1; $y = 2; $z = 3; $myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none"; $myvar == 'none'; // Good $x = 1; $y = 2; $z = 1; $myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none"; $myvar == 'bar'; // Good $x = 1; $y = 1; $z = 3; $myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none"; $myvar == 'bar'; // Bad! $x = 1; $y = 1; $z = 1; $myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none"; $myvar == 'bar'; // Bad!
我有时使用的一种风格,因为没有提到,所以我提出的风格是这样的:
$result = ($x == y) ? "foo" : "bar";
但是通常只有把它放在一条线上才会使它太长。 我发现有= ? :
= ? :
所有排队使它看起来更整洁。
三元运算符是编写简单的if语句的简短有效的方法。 他们不应该嵌套或难以阅读。 记住:你一次写软件,但被读100次。 阅读比写更容易。
我倾向于用括号括起来:(a == b)? 1:0
我会不同意这个共同意见。 我有点像我的条件运算符风格的Imran。 如果它适合干净地在一条线上,我保持在一条线上。 如果它不适合在一行干净,我打破它,但我只使用一个标签(4个空格;我有VS设置为制表符插入空格)的缩进。 我不会立即跳到if
– else
,因为条件运算符在很多情况下更有意义。 (但是,如果内容没有意义,我根本就不使用它。)
另外,我不嵌套条件运算符。 在那个时候,我发现它太难以阅读,现在是时候去更详细的if
– else
风格了。
这个“人为的例子”是我将如何缩进,除了我会从左边缘缩进,而不是基于(或上面的行)的位置。
对三元的批评者来说 – 可读性是重点。 如果你不认为这使得更多的可读代码,不要使用它。 但是我觉得至less在某些时候是这样的。
三元条件可以使代码更清洁和更优雅,最重要的是,帮助你强调正确的事情,避免重复自己。 考虑使用它们,但是不要通过这样做使代码不易读取。 在VB.NET中:
'before refactoring If x = 0 Then ' If-Then-Else puts emphasis on flow control label = "None" Else label = Foo.getLabel(x) ' If-Then-Else forces repeat of assignment line End If 'after refactoring label = If(x = 0, "None", Foo.getLabel(x)) ' ternary If puts emphasis on assignment
请注意,“可读性较差”与“我不习惯看到这个”是不一样的。
我不使用它。 它总是闻起来像试图节省空间和键入源代码与期望小源==更有效的编译代码。
我根本没有发现它可读,但其中很多是因为我从来没有使用它。
我倾向于不使用三元运算符,因为我发现如果..其他更可读。
伊姆兰,你已经格式化了这个美丽的。 但是,三元运算符在嵌套两个以上时往往会变得不可读。 一个if-else块可能会给你一个额外的可理解的嵌套层次。 除此之外,使用函数或表驱动的编程。
$foo = (isset($bar)) ? $bar : 'default';
我个人只用它作为一个variables的分配(在Java中)例如:
String var = (obj == null) ? "not set" : obj.toString();
和另一个例子,当使用不允许空参数的函数时,例如:
String val; [...] int var = (val == null) ? 0 : Integer.parseInt(val);