三元操作员如何工作?
请演示三元运算符如何使用常规的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)在expr1为TRUE时计算为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结果为“值小”。