是否应该在三元运算符周围放置括号?

Tom*_*sky 8 java ternary-operator

Checkstyle抱怨以下内容:

return (null == a ? a : new A());
Run Code Online (Sandbox Code Playgroud)

并且说这些是不必要的.

虽然声明在没有它们的情况下确实可以正常工作,但它们在现在看起来更具可读性 - 否则当我读它时我倾向于看到:

return null
Run Code Online (Sandbox Code Playgroud)

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

== a ? a : new A(); 
Run Code Online (Sandbox Code Playgroud)

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

此外,每当我看到三元运算符时,我倾向于做同样的事情,除非它被分组为parens.

所以:围绕三元的parens应该是事实上的标准吗?有没有理由不把它们放在那里?

Col*_*ert 7

好吧,checkstyle是对的,括号对执行没用.但是执行无用对于良好的代码读取并不意味着无用.如果阅读更有意义,你应该留下它们.

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

int number = (myBoolean)? 1 : 2;
Run Code Online (Sandbox Code Playgroud)

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

  • 嗯,这是一种习惯......而且,我觉得它让事情更加清晰. (4认同)

Ric*_*son 5

在阅读return语句时,我知道'return'和';'之间的所有内容 是什么将被返回,所以我无法读取您的代码示例作为返回null后跟一些符号,因为您声称你读它.

也许阅读解析技术可能会帮助你像我一样看到它.也就是说,我还没有真正阅读过解析技术,尽管多年来我一起拼凑了几个解析器.

我总是删除不必要的括号.它们无助于代码理解,因为我非常了解Java的运算符优先级.奇怪的是,我不确定,我加上括号,等待IDEA告诉我他们是多余的.然后我删除它们,并尝试提交内存我刚刚发现的优先规则.

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