优化复杂逻辑条件

optimize complex logic condition

提问人:Robber Pen 提问时间:4/17/2020 最后编辑:alkRobber Pen 更新时间:4/17/2020 访问量:67

问:

我遭受了复杂的 C 风格代码逻辑,例如

if (A || (B && (X || Y)))
  foo();

有没有更好的方法来读取布尔表,或者重新设计为人类可读的?

c 布尔逻辑

评论

2赞 Eugene Sh. 4/17/2020
如果它是一个定义的逻辑函数,对我来说足够可读。而且也是最好的,除非你把一些奇怪的东西藏在这些字母后面。
0赞 pmg 4/17/2020
if (oktoproceed(A, B, X, Y)) foo();

答:

0赞 bera 4/17/2020 #1

尝试使用布尔变量,例如:

bool one = X || Y;
bool two = one && B;
if(A || two)

而且,如果您想每次都打印结果。

评论

1赞 Eugene Sh. 4/17/2020
请注意,此代码不等同于原始代码,因为它强制对算子的两端进行求值,这在原始代码中不会发生,以防万一(击败短路求值)。||Atrue
1赞 alk 4/17/2020 #2

更好的方式

这主要是品味问题。

查看 OR 和 AND 的另一种方法是将它们视为 if/elseif/elseif 或 if/if/if 构造。

所以这个

if (A || (B && (X || Y)))

会变成

if A
  foo();
else if B {
  if X
    foo();
  else if Y
    foo();
}