您对三元运算符使用哪种编码方式?

如果短的话,我把它排成一行。最近,我一直在使用这种风格的较长或嵌套的三元运算符表达式。一个人为的例子:

$value = ( $a == $b )
? 'true value # 1'
: ( $a == $c )
? 'true value # 2'
: 'false value';

你个人使用哪种风格,或者觉得哪种风格最可读?

编辑: < em > (关于何时使用三元运算符)

我通常避免使用2级以上的深三元运算符。当我在 PHP 模板脚本中回显变量时,我倾向于选择2级深三元运算符,而不是2级 if-else。

60158 次浏览

我不用它。在我看来,这就像试图节省空间并输入源代码,期望小型源代码 = = 更有效的编译代码。

我觉得它一点也不可读,但这主要是因为我从来没有用过它。

我倾向于根本不使用三元操作符,因为我发现如果. . else 更易读。

就个人而言,我只使用三元运算符,如果它适合在一行。如果它需要跨越,那么是时候好老

if else if else

三元运算符是编写简单 if 语句的简短而有效的方法。它们不应该嵌套或难以阅读。记住: 你写了一次软件,但是被读了100次。它应该比写更容易阅读。

我不同意普遍的意见。我的条件运算符风格有点像依姆兰。如果它在一条线上完全合适,我就把它保持在一条线上。如果它不能完全放在一行上,我会折断它,但是我只使用一个制表符(4个空格; 我设置了 VS 来插入制表符的空格)来缩进。我不会马上跳到 if-else,因为很多时候条件运算符在上下文中更有意义。(然而,如果它在上下文中没有意义,我就不会使用它。)

另外,我不嵌套条件运算符。在这一点上,我确实发现它太难阅读,是时候转向更详细的 if-else样式了。

我尽量不使用三元运算符来编写嵌套条件。它无视可读性,并且不提供比使用条件语句更多的值。

只有当它可以放在一条线上,而且它的意思非常清楚的时候,我才会使用它:

$value = ($a < 0) ? 'minus' : 'plus';

我倾向于用括号括起这个条件: (a = = b) ? 1:0

依姆兰,你把这个格式化得很漂亮。但是,当嵌套多于两个时,三元运算符确实倾向于变得不可读。If-else 块可以为您提供一个额外的可理解嵌套级别。除此之外,还可以使用函数或表驱动编程。

一般要避免使用三元运算符,但这种形式可以很容易理解:

  result = (foo == bar)  ? result1 :
(foo == baz)  ? result2 :
(foo == qux)  ? result3 :
(foo == quux) ? result4 :
fail_result;

通过这种方式,条件和结果保持在同一行上,这样就相当容易浏览并理解发生了什么。

$foo = (isset($bar)) ? $bar : 'default';

我个人只用它来赋值一个变量(在 java 中) ,例如:

String var = (obj == null) ? "not set" : obj.toString();

以及(其他示例)当使用不允许空参数的函数时,例如:

String val; [...]
int var = (val == null) ? 0 : Integer.parseInt(val);

我使用的一种 有时候风格是这样的:

$result = ($x == y)
? "foo"
: "bar";

..but usually only if putting it all on one line makes it too long. I find that having the = ? : all line up makes it look neater.

“人为的例子”是我如何缩进它,除了我将缩进从左边距,而不是基于在哪里(或什么是在上面的行。

对于三元反对者来说,可读性是关键。如果您认为它不能提高代码的可读性,那么就不要使用它。但我发现,至少在某些时候情况恰恰相反。

PHP 嵌套三元运算符的行为不同。

此语法通过下列所有测试。 基于网络开发技术的 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

示例 # 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!

三元条件可以使代码更清晰、更优雅,最重要的是,它可以帮助您强调正确的事情,避免重复。可以考虑使用它们,但不要因此降低代码的可读性。在 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

请注意,“它的可读性较差”与“我不习惯看到这种情况”不是一回事。