Language agnostic 为什么可以';t条件运算符不能用作语句

Language agnostic 为什么可以';t条件运算符不能用作语句,language-agnostic,types,conditional-statements,conditional-operator,Language Agnostic,Types,Conditional Statements,Conditional Operator,为什么条件运算符不能用作语句 if (isXyz) doXyz(); else doAbc(); 我想做一些类似的事情: boolean isXyz = ...; ... isXyz ? doXyz() : doAbc(); 其中,doXyz和doAbc返回为void 请注意,这与其他操作符不同,例如doXyz()+doAbc()本质上需要doXyz和doAbc返回一个类似于要操作的数字(或要串联的字符串,或其他任何东西,但关键是+实际上需要值来操作) 是有什么深刻的东西,还是只是一个武断的

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

if (isXyz) doXyz(); else doAbc();
我想做一些类似的事情:

boolean isXyz = ...;
...
isXyz ? doXyz() : doAbc();
其中,
doXyz
doAbc
返回为void

请注意,这与其他操作符不同,例如doXyz()+doAbc()本质上需要doXyz和doAbc返回一个类似于要操作的数字(或要串联的字符串,或其他任何东西,但关键是+实际上需要值来操作)

是有什么深刻的东西,还是只是一个武断的决定


注意:我来自Java世界,但我想知道这在您最喜欢的编程语言中是否可行。

因为这会降低可读性并引入潜在的错误

语言通过使用关键字“如果”提供了做你想做的事情的方法

语句应该只执行一些操作


条件运算符意味着返回一个值。

这不是与
if
语句完全相同吗

if (isXyz) doXyz(); else doAbc();

某些语言确实允许您将条件运算符用作语句。我想到了Perl。

重点是什么?为什么不使用if语句(在我看来,它看起来更干净)?

C
C++
确实允许这样的构造。只要
doXyz()
doAbc()
返回相同的类型。包括
void

作为一种新颖的功能,mirccripting允许您这样做

alias canI? {
   $iif($1 == 1,doThis,doThat)
}
alias doThis echo -a this can.
alias doThat echo -a that can.
/canI调用它?1
将回显
此can

/canI调用它?2
将响应可以的

表达式,包括条件表达式,可以在Java和许多其他语言中单独用作语句(我甚至可以说是最流行的语言)

这里的问题是Java中的“void returning”,与条件无关。在表达式中隐藏活动(非幂等;有副作用)代码有时被认为是不好的,而活动函数通常返回void。因此,由于Java是一种规定性语言,它不允许在表达式中使用void函数。许多其他语言更为宽容,并将允许这样做


你可以让doAbc和doXyz返回一些东西来解决这个问题 — 零,一个布尔值,任何东西:只要它们的类型相同,结果就会在ExpressionStatement中丢弃。但我真的不知道你为什么要这么做;正如其他人所说,在这种情况下,用一种表达方式来表达是没有品味的,而且在很大程度上是毫无意义的。

我认为你的问题是错误的。。。。添加条件运算符是因为“IF-THEN”语句不能用作求值语句

在我的选项中,您应该只在有条件地进行计算时使用条件运算符,因为它本质上不如在纯粹实现条件时使用“IF-THEN”构造清晰


条件运算符通常不能在每个条件结果中包含多个指令块,“如果是”可以。

Perl中有什么是不允许的吗?我会选择
if
的方式(尽管我的“母语”
C++
允许我这样做),但这是我的决定。@hacker:可读性和减少出错的可能性正是微软团队将C#的“reference”关键字分为“ref”和“out”的原因。他们做出了那个决定,我支持它。新来的城市,你有自由支持任何观点或可读性。但这并不一定与我的观点一致,我也不想被迫进入你(或微软)的观点。这是一个一般性的陈述,与上面的任何一个例子都无关。你得到了什么编译器错误?