在程序中使用括号会降低可读性的一些示例是什么?

Bra*_*don 4 programming-languages parentheses language-concepts

我一直认为括号提高了可读性,但在我的教科书中有一个声明,即使用括号会大大降低程序的可读性.有没有人有任何例子?

Phi*_*hil 6

我可以找到许多反例,其中缺少括号会降低可读性,但我能想到的唯一一个例子就是作者可能有的意思是这样的:

if(((a == null) || (!(a.isSomething()))) && ((b == null) || (!(b.isSomething()))))
{
   // do some stuff
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,方法调用周围的()是不必要的,这种代码可以从将术语分解为变量中获益.由于所有这些紧密的问题处于中间状态,因此很难确切地知道什么与什么组合在一起.

boolean aIsNotSomething = (a == null) || !a.isSomething();  // parens for readability
boolean bIsNotSomething = (b == null) || !b.isSomething();  // ditto
if(aIsNotSomething && bIsNotSomething)
{
   // do some stuff
}
Run Code Online (Sandbox Code Playgroud)

我认为以上内容更具可读性,但这是个人观点.这可能就是作者所说的.

parens的一些好用途:

  • 区分行为改变时的操作顺序而没有parens
  • 区分行为不受影响的操作顺序,但不熟悉绑定规则的人将会读取您的代码.好公民的统治.
  • 表示在使用更大的表达式之前应该评估parens中的表达式: System.out.println("The answer is " + (a + b));

可能令人困惑的使用parens:

  • 在不太可能有其他意义的地方,比如在a.isSomething()上面.在Java中,如果a是一个Object,!a本身就是一个错误,所以显然!a.isSomething()必须否定方法调用的返回值.
  • 将大量条件或表达链接在一起,如果分解则更清楚.与上面的代码示例一样,将较大的paranthetical语句拆分为较小的块可以允许代码在调试器中更直接地逐步执行,如果稍后在代码中需要条件/值,则不会结束重复表达并完成两次工作.但这是主观的,如果你只使用1个位置的表达式而你的调试器无论如何都会显示中间计算表达式,这显然毫无意义.


SK-*_*gic 5

显然,你的教科书是由讨厌Lisp的人写的.

无论如何,这是一个品味问题,每个人都没有单一的事实.