繁体   English   中英

三元运算符如何工作?

[英]How does the ternary operator work?

请演示三元运算符如何与常规 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 的区别在于,三元表达式是求值结果的语句,而 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?

“是”:“否”

现在盲人可以看见了。

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

Boolean isValueBig;

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

正如引用自?: Operator MSDN page ,“条件运算符 (?:) 根据布尔表达式的值返回两个值之一。”

因此,您可以使用三元运算符返回的不仅仅是布尔值:

   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'];
  }

?>

“表达式(表达式1)(表达式2):(表达式3)的计算结果为表达式2如果expr1的评估为,并且如果表达式3 expr1的评估为”。

关于比较运算符的 PHP 文档

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

Boolean isValueBig = value > 100 ? true : false;

如:

bool isValueBig = value > 100

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

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

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

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

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

它被称为嵌套三元 这是邪恶的,既然你知道了,请永远不要使用它。 它的用途似乎与上面的情况类似,但很可能在现实生活中,您需要在失去可读性的地方使用它(考虑使用可变数量的参数更改配置等)。

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

引用自 MSDN(在前一篇文章中提到)

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

可以读作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM