2013-02-13 21 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

相關問題