8

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

Boolean isValueBig = value > 100 ? true : false;

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

4

12 回答 12

30
Boolean isValueBig = ( value > 100  ) ? true : false;


Boolean isValueBig;

if(  value > 100 ) { 
      isValueBig = true;
} else { 
     isValueBig = false;
}
于 2009-01-20T21:19:50.270 回答
16

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

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

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

但是,在这种情况下,您的陈述等同于:

Boolean isValueBig = (value > 100);
于 2009-01-20T21:25:44.640 回答
10

当我刚接触 C++ 时,我发现它有助于阅读这个结构,如下所示:

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

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

于 2009-01-20T21:21:27.643 回答
6
Boolean isValueBig;

if (value > 100)
{
   isValueBig = true;
}
else 
{
   isValueBig = false;
}
于 2009-01-20T21:20:53.823 回答
6

我从来都不是三元运算符的粉丝,因为我认为它很难阅读。碰巧的是,Jon Skeet 和他的书,C# in Depth终于击中了这只老狗的头,让它沉入水中。Jon 说,我解释一下,把它当作一个问题。

值 > 100?

“是”:“不是”

现在盲人可以看见了。

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

于 2009-01-20T21:40:38.807 回答
5
Boolean isValueBig;

if(value > 100) { isValueBig = true; } else { isValueBig = false; }
于 2009-01-20T21:19:56.820 回答
4

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

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

   string result = (value > 100 ) ? "value is big" : "value is small";
于 2009-01-20T21:30:04.570 回答
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) ? (expr2) : (expr3)如果expr1计算为TRUE则计算为expr2,如果expr1计算为FALSE则为expr3。”

关于比较运算符的 PHP 文档

于 2009-01-20T21:19:47.647 回答
2

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

Boolean isValueBig = value > 100 ? true : false;

作为:

bool isValueBig = value > 100

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

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

于 2009-01-21T19:03:24.083 回答
2

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

于 2009-01-21T19:07:49.957 回答
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();
}

这很容易理解,但有点沉重。因为三元只是另一种编写 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) { .. }

于 2009-01-21T20:02:38.503 回答
0

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

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

可以读作:

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

于 2009-03-16T15:35:27.063 回答