在布尔运算中,大量依赖短路是否是良好的编码风格?
我知道有些人喜欢这样做。例如,如果业务逻辑是“如果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
)时,才会对右操作数进行求值。
(令人讨厌的是,乍一看,你可能会认为这是一个 bug,但如果你把它改成更明显的形式,你会感到很愚蠢!)