如果它很短,我会保持单线。最近我一直在使用这种风格用于更长或嵌套的三元运算符表达式。一个人为的例子:
$value = ( $a == $b )
? 'true value # 1'
: ( $a == $c )
? 'true value # 2'
: 'false value';
您个人使用哪种风格,或者发现最具可读性?
编辑: (何时使用三元运营商)
我通常避免使用超过2级深度三元运算符。当我在PHP模板脚本中回显变量时,我倾向于更喜欢2级深度三元运算符而不是2级别。
答案 0 :(得分:85)
通常要避免使用三元运算符,但这种形式可以很容易阅读:
result = (foo == bar) ? result1 :
(foo == baz) ? result2 :
(foo == qux) ? result3 :
(foo == quux) ? result4 :
fail_result;
通过这种方式,条件和结果在同一条线上保持在一起,并且可以很容易地浏览并了解正在发生的事情。
答案 1 :(得分:77)
我尽量不使用三元运算符来编写嵌套条件。它无视可读性,并且没有使用条件的额外价值。
只有它可以放在一条线上,并且它的结晶清晰意味着什么,我就用它:
$value = ($a < 0) ? 'minus' : 'plus';
答案 2 :(得分:24)
就个人而言,我只使用三元运算符,如果它适合一行。如果它需要跨越,那么现在是时候了好的
if else if else
答案 3 :(得分:13)
我有时使用的一种风格,我提到它,因为它没有被提及,是这样的:
$result = ($x == y)
? "foo"
: "bar";
..但通常只有将它全部放在一行上才会使它太长。我发现= ? :
所有排队都让它看起来更整洁。
答案 4 :(得分:13)
PHP嵌套的三元运算符表现不同。
此语法通过了以下所有测试。 基于http://deadlytechnology.com/web-development-tips/php-ternary-syntax/
$myvar = ($x == $y)
?(($x == $z)?'both':'foo')
:(($x == $z)?'bar':'none');
示例#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!
答案 5 :(得分:9)
三元运算符是编写简单if语句的简短有效方法。它们不应嵌套或难以阅读。请记住:您只需编写一次软件,但会被读取100次。它应该比阅读更容易阅读。
答案 6 :(得分:4)
我倾向于将条件括在括号中:(a == b)? 1:0
答案 7 :(得分:2)
我不同意共同意见。我有点像我的条件运算符样式的Imran。如果它在一条线上干净利落,我将它保持在一条线上。如果它不能完全适合一行,我会打破它,但我只使用一个标签(4个空格;我有VS设置为标签插入空格)用于缩进。我没有立即跳转到if
- else
,因为很多时候条件运算符在上下文中更有意义。 (但是,如果它在上下文中没有意义,我只是不使用它。)
另外,我没有嵌套条件运算符。那时候,我觉得它很难阅读,现在是时候采用更冗长的if
- else
风格了。
答案 8 :(得分:1)
“人为的例子”是我如何缩进它,除了我会从左边距缩进,而不是基于(或者上面的任何内容)。
对于三元批评者 - 可读性是重点。如果您认为它不会产生更易读的代码,请不要使用它。但我发现至少在某些时候情况恰恰相反。
答案 9 :(得分:1)
三元条件可以使代码更清晰,更优雅,最重要的是,帮助您强调正确的事情,避免重复自己。考虑使用它们,但这样做不会使代码的可读性降低。在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
请注意,“它的可读性较差”与“我不习惯看到”不一样。
答案 10 :(得分:0)
我不使用它。它总是闻到我的味道,就像试图节省空间和输入源代码一样,期望小源=更高效的编译代码。
我发现它根本不可读,但其中很多是因为我从不使用它。
答案 11 :(得分:0)
我倾向于根本不使用三元运算符,因为我发现..其他更可读。
答案 12 :(得分:0)
答案 13 :(得分:0)
$foo = (isset($bar)) ? $bar : 'default';
答案 14 :(得分:0)
我个人仅将它用于变量的赋值(在java中),例如:
String var = (obj == null) ? "not set" : obj.toString();
和(其他示例)使用不允许空参数的函数时:
String val; [...]
int var = (val == null) ? 0 : Integer.parseInt(val);