三元表达式是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三元表达式是啥?相关的知识,希望对你有一定的参考价值。

三元表达式是:表示三元运算符需要三个操作数。三元运算符是软件编程中的一个固定格式,语法是“条件表达式?表达式1:表达式2”。使用这个算法可以使调用数据时逐级筛选。

举个简单例子:

int a=1;int b=2;int c= a>b?1:0,结果c 为0。a>b 为条件,后面当条件为true时返回":"前面的结果,反之返回":"后面的结果。

三元运算符是软件编程中的一个固定格式,语法是“条件表达式?表达式1:表达式2”。使用这个算法可以使调用数据时逐级筛选。

格式

如名字表示的三元运算符需要三个操作数。

语法为:条件表达式?表达式1:表达式2。

说明:问号前面的位置是判断的条件,判断结果为bool型,为true时调用表达式1,为false时调用表达式2。

其逻辑为:“如果条件表达式成立或者满足则执行表达式1,否则执行第二个。”常用在设置默认值,例如某个值不一定存在,则判断这个值是否存在,不存在给默认值(表达式2)。

参考技术A

三元表达式是:条件成立时的返回值 if 条件 else 条件不成立时的返回值。

x = 10

y = 20

print(f"x if x > y else y: x if x > y else y")

x if x > y else y: 20

如名字表示的三元运算符需要三个操作数。

语法为:条件表达式?表达式1:表达式2。

说明:问号前面的位置是判断的条件,判断结果为bool型,为true时调用表达式1,为false时调用表达式2。

其逻辑为:“如果条件表达式成立或者满足则执行表达式1,否则执行第二个。”常用在设置默认值,例如某个值不一定存在,则判断这个值是否存在,不存在给默认值(表达式2)。

三元从句中连续两个问号是啥意思?

【中文标题】三元从句中连续两个问号是啥意思?【英文标题】:What Do Two Question Marks in a Row in a Ternary Clause Mean?三元从句中连续两个问号是什么意思? 【发布时间】:2021-03-25 21:13:57 【问题描述】:

最近在一段Java代码中看到了这个三元运算语句:

int getVal(Integer number, boolean required) 
    Integer val = number == null ? required ? 1 : 2 : 3;
    return val;

我从来没有见过像这样连续有两个问号的三元语句(没有任何括号)。如果我使用输入值,我可以让1 返回,如果number == null3 否则返回,但似乎并不重要,2 永远不会返回。

这个语句是什么意思(即我应该如何将它理解为true/false 条件的单词语句)以及2 的输入需要是什么退了吗?

【问题讨论】:

【参考方案1】:

它只是一个嵌套的三元语句。加括号更清楚:

number == null ? (required ? 1 : 2) : 3;

要返回 2,输入需要什么?

number = nullrequired = false

【讨论】:

我同意,括号让事情变得更好。谢谢!【参考方案2】:

这就是为什么显式添加括号总是一个好主意,所以意图一目了然:

Integer val = number == null ? (required ? 1 : 2) : 3;

【讨论】:

我同意,括号使事情更容易阅读。谢谢!【参考方案3】:

感谢@luk2302 和@racraman 的回答!根据您在括号中列出的理解:

Integer val = number == null ? (required ? 1 : 2) : 3;

我只想补充一点,将其“解读”为真实陈述的方式是:

If opt == null and required == true: 1
If opt == null and required == false: 2
If opt != null: 3   // value of required doesn't matter

我希望这可以帮助其他可能无法阅读此声明的人。

(注意:我不确定将其作为问题的更新发布是否更好,但由于它在技术上是“解释”,因此答案似乎是最好的地方。如果你喜欢我的回答,请为@luk2302 和@racraman 投票,因为他们是这个添加的灵感来源)

【讨论】:

您将其作为答案发布是正确的。 谢谢@Andreas,感谢您的保证/确认!【参考方案4】:

a ? b ? c : d : e 形式的表达式使用条件运算符两次。唯一的含糊之处在于顺序。

它不能表示(a ? b) ? c : d : e,因为那会是一个语法错误。

因此,它必须表示a ? (b ? c : d) : e

即等价于:

if (a) 
  if (b) 
    return c;
   else 
    return d;
  
 else 
  return e;

一个更有趣的案例是

a ? b : c ? d : e

可以读作

(a ? b : c) ? d : e 

a ? b : (c ? d : e)

为了解决这种歧义,Java 语言规范writes:

条件运算符在语法上是右关联的(它从右到左分组)

【讨论】:

幸运的是,在现实世界的代码库/示例中从未见过 a ? b : c ? d : e,看起来很吓人...【参考方案5】:

应该加括号,这样理解会更清楚

Integer val = number == null ? (required ? 1 : 2) : 3;

这相当于

if (number == null)

    if (required == true)
    
        return 1;
    
    else 
    
        return 2;
    

else

    return 3;

输入需要 2 才能返回 number = nullrequired = false

【讨论】:

以上是关于三元表达式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

java中的条件运算符是啥?

三元表达式

C#中的三元表达式

为啥Vue的三元表达式切换Class失灵

什么是三元表达式?“三元”表示什么意思?

三元表达式,递归,