Boolean isValueBig = ( value > 100 ) ? true : false;
// above line is same as:
Boolean isValueBig;
if( value > 100 ) {
isValueBig = true;
} else {
isValueBig = false;
}
三元运算和if/else的区别在于,三元表达式是一个计算结果的语句,而if/else不是。
要使用您的示例,从使用三元表达式更改为 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;
}
我从来都不喜欢三元运算符,因为我认为它很难阅读。碰巧的是,Jon Skeet 和他的书《C# in Depth》最终击中了这只老狗的头,让它陷入困境。Jon 说,我解释一下,把它看作一个问题。
值 > 100?“是”:“否”
现在盲人可以看见了。
希望这可以帮助您使其成为第二天性。
<?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'];
}
?>
“如果
expr1有关比较运算符的 PHP 文档计算结果为 TRUE,则表达式 (expr1) ? (expr2) : (expr3) 计算结果为 expr2;如果 expr1 计算结果为 FALSE,则计算结果为 expr3。”
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();
}
很容易理解,但有点沉重。因为ternary 只是编写 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();
它被称为嵌套三元
。它是邪恶的,既然你知道它,请永远不要使用它。它的用途可能与上面的情况类似,但在现实生活中,您很可能需要在失去可读性的地方使用它(考虑使用可变数量的参数等来更改配置)。 奖励扇区:永远不要在 if() 内设置属性值,只需看看这个:
if(bool=true!=false) { .. }
字符串结果=(值> 100)? “价值大”:“价值小”;
可以理解为:
值是否大于100?如果是,字符串结果是“值大”,如果否,字符串结果是“值小”。
fun ternary(cond, trueVal, falseVal) = if cond then trueVal else falseVal;