三元运算符如何工作?

问题描述 投票:0回答:13

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

Boolean isValueBig = value > 100 ? true : false;

精确重复: 如何使用三元运算符?

c# java c ternary-operator
13个回答
30
投票
Boolean isValueBig = ( value > 100  ) ? true : false;

// above line is same as:

Boolean isValueBig;

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

16
投票

三元运算和if/else的区别在于,三元表达式是一个计算结果的语句,而if/else不是。

要使用您的示例,从使用三元表达式更改为 if/else 您可以使用以下语句:

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

但是,在这种情况下,您的陈述相当于:

Boolean isValueBig = (value > 100);

10
投票

当我刚接触 C++ 时,我发现阅读这个结构很有帮助:

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

(请注意,这不是有效的代码。这只是我训练自己在脑海中阅读的代码。)


6
投票
Boolean isValueBig;

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

6
投票

我从来都不喜欢三元运算符,因为我认为它很难阅读。碰巧的是,Jon Skeet 和他的书《C# in Depth》最终击中了这只老狗的头,让它陷入困境。Jon 说,我解释一下,把它看作一个问题。

值 > 100?

“是”:“否”

现在盲人可以看见了。

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


5
投票


4
投票
?: Operator MSDN 页面

,“条件运算符 (?:) 根据布尔表达式的值返回两个值之一。” 因此,您可以使用三元运算符返回的不仅仅是布尔值:

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



2
投票
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']; } ?>

  
“如果
expr1

计算结果为 TRUE,则表达式 (expr1) ? (expr2) : (expr3) 计算结果为 expr2;如果 expr1 计算结果为 FALSE,则计算结果为 expr3。”

有关比较运算符的 PHP 文档


2
投票


2
投票

Boolean isValueBig = value > 100 ? true : false;

如:

bool isValueBig = value > 100

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

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


1
投票

假设您有一段代码,该代码应该为某个值的每个可能变化返回一个不同的对象,为了简单起见,我们假设返回 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) { .. }

    


0
投票

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

可以理解为:

值是否大于100?如果是,字符串结果是“值大”,如果否,字符串结果是“值小”。


0
投票

fun ternary(cond, trueVal, falseVal) = if cond then trueVal else falseVal;

    

© www.soinside.com 2019 - 2024. All rights reserved.