9

Checkstyle 抱怨以下问题:

return (null == a ? a : new A());

并说括号是不必要的。

虽然没有它们,该声明当然可以正常工作,但如果有它们,它似乎更具可读性——否则,当我阅读它时,我倾向于看到:

return null

首先,然后必须停下来考虑剩余的

== a ? a : new A(); 

部分,因为我的大脑已经走了一条路。

此外,每当我看到三元运算符时,我倾向于做同样的事情,除非它被分组在括号中。

那么:三元组周围的括号是否应该成为事实上的标准?有没有理由不把它们放在那里?

4

6 回答 6

7

好吧,checkstyle 是对的,括号对执行没有用。但对执行无用并不意味着对代码的良好阅读无用。如果阅读更有意义,您应该离开它们。

我认为这段代码不需要更多的括号:

int number = (myBoolean)? 1 : 2;

但在你的情况下,return关键字和你的布尔值是一个表达式的事实可以改变你阅读语句的方式。

于 2010-09-01T17:50:49.910 回答
6

阅读退货声明时,我知道'return'和';'之间的所有内容 是要返回的内容,因此我无法将您的代码示例读取为 return null 后跟一些符号,因为您声称您已阅读它。

也许阅读解析技术可能会帮助您像我一样看待它。也就是说,我还没有真正阅读过解析技术,尽管这些年来我拼凑了一些解析器。

我总是删除不必要的括号。它们对代码理解没有帮助,因为我非常了解 Java 的运算符优先级。我不确定的奇怪时间,我添加括号并等待看看 IDEA 是否告诉我它们是多余的。然后我删除它们,并尝试记住我刚刚发现的优先规则。

在我继承的代码库中,我倾向于在由于其他原因而较差的代码区域中找到最多数量的冗余括号,因此我将两者联系起来。

于 2010-09-01T19:56:34.070 回答
3

不,它不应该是事实上的标准。我更喜欢没有括号。

我认为将它们放在那里的唯一原因是强制评估顺序或澄清一条令人困惑的路线。

于 2010-09-01T17:52:15.993 回答
2

这两个选项都是正确的,使用你的团队使用的或者你喜欢的,如果你单独工作的话。

IIRC 默认情况下,checkstyle 使用 Sun 的 (rip) 样式指南,因此如果您想符合标准样式,请收听并删除括号。

于 2010-09-01T17:50:43.640 回答
2

一般来说,没有

三元(也称为条件)运算符或其部分周围不需要括号,因为它们的优先级在运算顺序中非常低(仅低于逻辑运算符和高于赋值)。有关完整表格,请参阅下面的链接。

因此,可以说,这种不必要的括号在视觉上使代码混乱,并且它们表明程序员缺乏理解力

可能需要在三元组中或周围使用括号的例外情况是:

  • 如果你的三进制足够复杂,值得多行;然后,您可以将语句括在括号中,以防止自动插入分号。

  • 如果您的三元组嵌套在另一个三元组中。

另见 MDN:

于 2016-05-10T19:06:05.620 回答
0

由于您的问题的基础与阅读代码的行为有关,我将从这个角度来处理这个问题。

所谓的“速读”训练计划的基本原则之一是,它们试图让读者形成一行文本的格式塔,而不是按顺序逐字阅读。您可能会尝试从他们的书中获取一页并从您的代码中退后一步——如果有必要的话——从字面上理解——以了解整行,而不是将阅读行为视为逐个令牌解析的行为。

或者,您可以使用允许您配置样式的编辑器:您可以将三元运算符设置为不同的颜色,以便它跳出来。例如,Notepad++ 有许多内置主题可以做到这一点,许多其他编辑器也是如此。

于 2010-09-01T18:10:27.663 回答