表达式生成错误

时间:2015-07-21 02:50:56

标签: java language-design

我最近刚刚了解到C ++允许合法代码,如:

12; //just an expression -- expression statement to be exact
int i = 45;
(i > 0) ? i-- : 1;

Altghough它可能不是最好的实践,我可以看到一些有用的情况,其中使用表达式作为完整语句可以帮助。所以,我只是想知道,为什么Java中没有相似的功能?禁止如下代码的原因是什么:

public static void main (String[] args){
    func() + 1; // ERROR: NOT A STATEMENT
}

public static int func(){
    return 34;
}

1 个答案:

答案 0 :(得分:4)

  

Altghough它可能不是最好的实践,我可以看到一些有用的情况,其中使用表达式作为完整语句可以帮助

在Java中完全允许使用表达式作为语句(比如说System.out.println("hello"))。只是他们为总是没有副作用的表达式(比如算术表达式)做了一个显式异常。在任何情况下,使用无副作用的表达式都不会产生任何影响(有用或无效)。

  

所以,我只是想知道,为什么Java中没有相似的功能?

你有错误的方法:这是Java中缺少的一个功能。

在C中而不是在Java中允许42;这样的东西的原因是在C标准的语法定义中有一个规则<stmnt> ::= <expression> ';'。 Java中存在相同的规则,但在Java中,它们添加了一个异常,使得将此规则应用于始终无副作用的表达式是非法的。他们添加了这个规则,因为像这样的代码永远不会产生任何影响,并且由于程序员不太可能故意编写无意义的代码,因此很可能是一个错误,因此应该被视为一个。

请注意,添加异常的唯一缺点是它使标准稍微复杂一些(通过添加语法异常)并且使实现稍微困难(因为现在编译器需要检测这样的代码并生成这是一个错误 - 尽管应该注意的是,今天使用的大多数(如果不是全部)C和C ++编译器也会检测这样的代码并为此产生警告。