三元表达式是啥?
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 == null
和3
否则返回,但似乎并不重要,2
永远不会返回。
这个语句是什么意思(即我应该如何将它理解为true
/false
条件的单词语句)以及2
的输入需要是什么退了吗?
【问题讨论】:
【参考方案1】:它只是一个嵌套的三元语句。加括号更清楚:
number == null ? (required ? 1 : 2) : 3;
要返回 2,输入需要什么?
number = null
和 required = 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 = null
和 required = false
【讨论】:
以上是关于三元表达式是啥?的主要内容,如果未能解决你的问题,请参考以下文章