为什么不能将条件运算符用作语句

时间:2009-09-03 10:16:34

标签: language-agnostic types conditional-statements conditional-operator

为什么不能将条件运算符用作语句?

我想做点什么:

boolean isXyz = ...;
...
isXyz ? doXyz() : doAbc();

其中doXyzdoAbc返回无效。

请注意,这与其他运算符不同,例如doXyz()+ doAbc()本质上需要doXyz和doAbc返回一个数字类似的东西来操作(或者连接字符串,或者其他什么,但重点是+实际上需要操作值。)

有什么深刻的东西,或者只是一个随意的决定。

注意:我来自Java世界,但我想知道您是否可以使用自己喜欢的编程语言。

7 个答案:

答案 0 :(得分:5)

CC++允许这样的结构。只要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”可以。