2013-02-13 59 views
2

比方说,我有以下的bool:更简单的方法来比较bools对?

  • ISA
  • ISB
  • 为-C
  • isExistingA
  • isExistingB
  • isExistingC

当ISA,ISB,或为-C是真的,如果所有真正的布尔相对应的是现存博ols也是如此,我想要做点什么。如果isA,isB或isC为false,则其对应的isExisting bool无关紧要。

这就是我想出了:

if ((isA || isB || isC) 
    && ((!isA || isExistingA) 
    && (!isB || isExistingB) 
    && (!isC || isExistingC))) 
{ 
    // do something 
} 

我显然不能认为今天如果有更简单的方式来表达这个不知道。

+4

对我来说似乎很合理,虽然'&&'是联想性的,所以你不需要第二和第三个附加的额外parens。 – Neil 2013-02-13 21:34:11

+1

@尼尔:我认为额外的parens使它更具可读性。 – Kevin 2013-02-13 21:35:52

+0

另外,@约翰斯特拉卡:你使用多行和缩进的方式使得这个语句更容易阅读:) – Kevin 2013-02-13 21:36:33

回答

7

Wolfram Alpha的简化布尔表达式,试试这个link

然而在我看来,不用担心这个的太多,以保持它更重要的你的if语句干净和可读性,而不是担心紧凑或性能。

+0

+1对于酷酷有用的钨魔技巧 – Mikeb 2013-02-13 21:47:34

+0

+1为链接,那一定会派上用场! – Saggio 2013-02-13 21:51:49

1

问题是要求尽管只有一个是X变量必须是真的,所有是X变量必须被检查。所以我不认为你可以用较少的“比较”来写出一个陈述。

我认为你目前的解决方案是最短的形式,但是如果我没有解释就阅读那些代码,我可能不会理解它,没有看两遍(我假设实际名称更具描述性,可能更有意义给读者)。

+0

我同意,这有点迟钝。尽管如此,它对商业名称更有意义。 – 2013-02-13 21:45:02

相关问题