为什么不能将条件运算符用作语句?
我想做点什么:
boolean isXyz = ...;
...
isXyz ? doXyz() : doAbc();
其中doXyz
和doAbc
返回无效。
请注意,这与其他运算符不同,例如doXyz()+ doAbc()本质上需要doXyz和doAbc返回一个数字类似的东西来操作(或者连接字符串,或者其他什么,但重点是+实际上需要操作值。)
有什么深刻的东西,或者只是一个随意的决定。
注意:我来自Java世界,但我想知道您是否可以使用自己喜欢的编程语言。
答案 0 :(得分:5)
C
和C++
允许这样的结构。只要doXyz()
和doAbc()
返回相同的类型。包括void
。
答案 1 :(得分:2)
有什么意义?为什么不使用if语句(在我看来,它看起来更干净)?
答案 2 :(得分:1)
因为它会降低可读性并引入错误的可能性。
语言提供了使用关键字“if”执行所需操作的方法。
// Is not much longer than the line below
// but significantly more transparent
if (isXyz) doXyz() else doAbc();
isXyz ? doXyz() : doAbc();
声明应该只执行一些操作。
条件运算符意味着返回一个值。
答案 3 :(得分:1)
作为一种新奇事物,mIRCscripting允许你这样做
alias canI? {
$iif($1 == 1,doThis,doThat)
}
alias doThis echo -a this can.
alias doThat echo -a that can.
使用/canI? 1
调用它将回显this can
。
使用/canI? 2
调用它将回显that can
。
答案 4 :(得分:0)
这不会与if
声明完全相同吗?
if (isXyz) doXyz(); else doAbc();
某些语言允许您将条件运算符用作语句。想到Perl。
答案 5 :(得分:0)
包含条件表达式的表达式可以单独用作Java语句和许多其他语言(我会说大多数当前流行的语言)。
在Java中特别是'void-return'这是问题所在,而不是与条件有关。在表达式中隐藏活动(非幂等;带副作用)代码有时被认为是不好的味道,并且活动函数通常返回void。因为Java是一种规范性语言,它不允许在表达式中使用void函数。许多其他语言更宽松,并允许它。
你可以通过让doAbc和doXyz返回一些东西来解决它 - 零,一个布尔值,任何东西:只要它们是两者的相同类型都无关紧要,结果将在ExpressionStatement中抛弃。但我真的不知道你为什么要这样做;正如其他人所说的那样,这确实是一个表达方式很差并且毫无意义的情况。
答案 6 :(得分:0)
我认为你的问题是错误的方式...添加了条件运算符,因为“IF THEN”语句不能用作评估语句。
在我的选项中,你应该只在条件评估时使用条件运算符,因为在纯粹实现条件时,它本质上不如使用“如果那么”构造那样明确。
条件运算符通常不能在每个条件结果中包含多个指令块,“IF THEN”可以。