【发布时间】:2014-05-16 15:34:29
【问题描述】:
在布尔评估中严重依赖短路是一种好的编码风格吗?
我认识一个喜欢这样做的人。 例如,如果业务逻辑是“如果 Alice 不饿,或者如果 Alice 和 Bob 都饿了”,而不是写
// if Alice is not hungry or both alice and bob are hungry
if (!A || A && B)`
他会写
// if Alice is not hungry OR both alice and bob are hungry
if (!A || B)
认为|| 是短路的,因此当且仅当第一个是false(表示A = true)时才计算右操作数。
(令人讨厌的是,乍一看,您会认为这是一个错误,但如果您将其更改为更明显的内容,您会觉得您看起来很愚蠢!)
【问题讨论】:
-
在布尔逻辑中,可能没问题。大多数程序员通常都能理解它。不过可能值得评论。
-
这是一个意见问题,但根据我的经验,我已经看到 Java 短路用于简化布尔表达式。习惯了就不会太难读了。
-
@AnubianNoob 对,问题是开发人员会留下评论,使谓词看起来更像一个错误! (即,ocmment 将说明业务逻辑,而谓词似乎在做其他事情!)
-
编译器(或者,在 Java 的例子中,Hotspot)非常擅长去除常见的子表达式。代码应该是程序员可读的,并且应该明显符合要求。
-
您在第一个表达式中依赖于 Java 操作顺序 !A || A && B. 我会这样写: (!A) || (A && B) 使其对人类更具可读性。
标签: java coding-style