依靠Java的短路评估(编码风格)

One*_*ree 9 java coding-style

在布尔评估中严重依赖短路是否是一种良好的编码风格?

我认识一个喜欢这样做的人.例如,如果业务逻辑是"如果Alice不饿,或者Alice和Bob都饿了",而不是写作

// if Alice is not hungry or both alice and bob are hungry
if (!A || A && B)` 
Run Code Online (Sandbox Code Playgroud)

他会写的

// if Alice is not hungry OR both alice and bob are hungry
if (!A || B)
Run Code Online (Sandbox Code Playgroud)

认为这||是短路的,所以当且仅当第一个是false(意味着A = true)时,才对右操作数进行评估.

(令人烦恼的是,乍一看,你会认为这是一个错误,但如果你把它改成更明显的话,你会觉得你看起来很愚蠢!)

Rob*_*Rob 10

你当然可以而且应该依赖于表达式中的短路,但你给出的例子就是糟糕的编程.表达式的逻辑应该与注释和测试的人类可读逻辑相匹配.优化器完全理解布尔逻辑,并将优化您的队友可能抱怨的任何明显的低效率.

最重要的是为开发人员提供清晰易懂的代码.编写聪明的代码来证明你是多么聪明,这绝不是一个好习惯.


Kev*_*nko 8

这是一种好风格吗?是的,我认为大多数人都会欣赏这种惯用的风格:

myFoo != null && myFoo.myMethod();
Run Code Online (Sandbox Code Playgroud)


Nic*_*erd 0

我想在这种情况下,无论短路与否,结果都是一样的。他在这里并不依赖短路,而是简化所需的逻辑。

在我看来,没有一个非常明确的黑白答案。我个人不会像这样简化逻辑语句,因为对我来说,当我稍后再回来时很难阅读。添加额外的逻辑来明确解释我的检查不会