三元操作员如何工作?

请演示三元运算符如何使用常规的if / else块。 例:

Boolean isValueBig = value > 100 ? true : false; 

完全重复: 如何使用三元运算符?

 Boolean isValueBig = ( value > 100 ) ? true : false; Boolean isValueBig; if( value > 100 ) { isValueBig = true; } else { isValueBig = false; } 

三元操作和if / else之间的区别在于三元expression式是一个评估值,而if / else不是。

要使用你的例子,从使用三元expression式改为if / else,你可以使用这个语句:

 Boolean isValueBig = null; if(value > 100) { isValueBig = true } else { isValueBig = false; } 

在这种情况下,你的陈述相当于这个:

 Boolean isValueBig = (value > 100); 

当我刚接触C ++时,发现它帮助读取这个构造如下:

 Boolean isValueBig = if condition ? then x else: y; 

(请注意,这不是有效的代码,而是我自己训练自己去阅读的内容。)

 Boolean isValueBig; if (value > 100) { isValueBig = true; } else { isValueBig = false; } 
 Boolean isValueBig; if(value > 100) { isValueBig = true; } else { isValueBig = false; } 

我从来不是三元运营商的粉丝,因为我觉得很难阅读。 正如它发生的那样,Jon Skeet和他的书“ C#深度”终于把这头老头撞到了脑袋里,把它沉下去了.Jon说,我把它解释为一个问题。

值> 100?

“是”:“不”

现在盲人可以看到。

希望这可以帮助你使其成为第二天性。

正如从?:Operator MSDN页面引用的那样,“条件运算符(?:)根据布尔expression式的值返回两个值中的一个”。

所以你可以使用三元运算符来返回不仅仅是布尔值:

  string result = (value > 100 ) ? "value is big" : "value is small"; 

PHP示例

 <?php // Example usage for: Ternary Operator $action = (empty($_POST['action'])) ? 'default' : $_POST['action']; // The above is identical to this if/else statement if (empty($_POST['action'])) { $action = 'default'; } else { $action = $_POST['action']; } ?> 

“expression式(expr1)?(expr2):(expr3)expr1TRUE时计算为expr2 ,在expr1计算为FALSE时计算expr3

比较运算符的PHP文档

确保不要在Java中以真/假部分混合types。 它产生奇怪的结果:-(

不好的例子,因为你可以很容易地写

 Boolean isValueBig = value > 100 ? true : false; 

如:

 bool isValueBig = value > 100 

除此之外,其他人已经回答了。 我只是不推荐使用三元运算符来设置布尔值,因为你正在评估的是一个布尔值。

我意识到这只是一个例子,但值得指出。

其他人已经回答了,但这里有一件事你应该真正了解三元的用法,我的意思是永远不要这样做。

让我们假设你有一段代码,它应该为某个值的每个可能的变化返回一个不同的对象,为了简单起见,可以说1到5之间的整数。你的代码如下所示:

 if(i==1) { return new ObjectOne(); } else if(i==2) { return new ObjectTwo(); } else if(i==3) { return new ObjectThree(); } else if(i==4) { return new ObjectFour(); } else if(i==5) { return new ObjectFive(); } else { return new DefaultObject(); } 

这很容易理解,但有点沉重。 因为三元是写一个if..else语句的另一种方式 ,可以重构这个

 return (i==1) ? new ObjectOne() : (i==2) ? new ObjectTwo() : (i==3) ? new ObjectThree() : (i==4) ? new ObjectFour() : (i==5) ? new ObjectFive() : new DefaultObject(); 

它被称为嵌套三元组 。 这是邪恶的,现在你知道它,请不要使用它。 它可能看起来像上面的情况,但它很有可能在现实生活中,你会需要使用它的地方,它失去了可读性(考虑改变configuration可变数量的参数等)。

奖励部门:永远不要在if()中设置属性值,只要看看这个: if(bool=true!=false) { .. }

正如MSDN引用(在上一篇文章中指出的那样)

string结果=(值> 100)? “价值大”:“价值小”;

可以读作:

价值大于100? 如果是,string结果为“值大”,否则string结果为“值小”。