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

3
为什么条件运算符不能作为语句使用?
我想要做类似这样的事情:
boolean isXyz = ...;
...
isXyz ? doXyz() : doAbc();

doXyzdoAbc是无返回值的。

请注意,这与其他运算符不同,例如,doXyz() + doAbc()内在上需要doXyzdoAbc返回一个类似数字的东西来操作(或字符串连接,或任何其他东西,但重点是+实际上需要值来进行操作)。

这是一些深入的东西还是只是一项任意决定。

注意:我来自Java世界,但我想知道在您喜欢的编程语言中是否可能实现此功能。


你得到了哪个编译器错误? - Steve Jessop
7个回答

5

CC++都允许这样的结构。只要doXyz()doAbc()返回相同类型,包括void


2

有什么意义呢?为什么不直接使用if语句(在我看来,这样更清晰)?


1

因为这会降低可读性并引入错误的可能性。

编程语言通过使用关键字“if”提供了实现所需功能的方法。

// Is not much longer than the line below
// but significantly more transparent
if (isXyz) doXyz() else doAbc();

isXyz ? doXyz() : doAbc();

语句只是执行一些操作。

条件运算符的目的是返回一个值。


2
编程语言无权强制程序员按照某些人认为更易读的方式进行编写。我个人会选择使用 if 的方式(即使我的“母语” C++ 允许这样做),但决定权在于我自己。 - Michael Krelin - hacker
1
@hacker:易读性和减少错误的潜在可能性正是微软团队将C#中的“reference”关键字拆分为“ref”和“out”的原因。他们做出了这个决定,我支持它。 - user151323
1
新来的,你有自由支持任何观点或可读性。但这不一定与我的观点相符,我不想被强迫接受你(或微软)的观点。这是一个普遍的声明,与上面的任何示例无关。 - Michael Krelin - hacker

1
作为一项新颖的功能,mIRC脚本编写使您能够做到这一点。
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


0

这不就和 if 语句一模一样吗?

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

有些语言允许您将条件运算符用作语句。Perl 是一个很好的例子。


2
在 Perl 中有什么是不允许的吗 :) ? - flybywire

0

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

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

您可以通过使doAbc和doXyz返回某些内容来解决这个问题——零、布尔值、任何东西:只要它们对于两者都是相同的类型,在ExpressionStatement中结果将被丢弃。但我真的不知道为什么你想这样做;正如其他人所说,这确实是一个在表达式中执行它是不好的习惯,而且基本上是没有意义的情况。


0

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

在我的看法中,只有在有条件地进行评估时才应该使用条件运算符,因为与仅实现条件时使用“IF THEN”结构相比,它本质上不太清晰。

条件运算符通常不能包含每个条件结果的多个指令块,“IF THEN”可以。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接