2013-07-14 141 views
0

對於問題的抽象性質的理解,但儘管我正在考慮像java或c#這樣的實現,但這是一般概念,目前略微困擾我。級聯布爾邏輯

當大多數語言使用布爾邏輯進行測試時,只有一個答案是有效的。

if (fridgeDoorClosed !=true) 
closeFridge(); 
else 
eatSandwich(); 

但是,如果多個路徑可能是正確的呢?假設用戶使用複選框選擇他/她想查看的網頁上的表單。一個可怕的不雅途徑做到這一點將是:

if ((checkbox1==true)&&(checkbox2==true)&&(checkbox3==true)) 
blah 
else if 
((checkbox1==true)&&(checkbox2==true)&&(checkbox3==false)) 
blah 

等等,當然要小心秩序。

在諸如java和c#等語言的語言中,可以使用switch語句,而忽略通常的break語句來強制級聯。但是這種方法能否以實用的方式使用?

回答

1

一般來說,我會做這樣的事情:

if(checkbox1) { 
    if(checkbox2) { 
    if(checkbox3) { 
     // all three 
    } 
    else { 
     // a, b, not c 
    } 
    } 
    // ....... 
} 

但根據不同的情況,你可以這樣做:

boxes = (checkbox1?1:0)+(checkbox2?2:0)+(checkbox3?4:0); 
switch(boxes) { 
case 0: // no boxes 
    break; 
case 1: // box 1, not 2 or 3 
    break; 
case 2: // box 2, not 1 or 3 
    break; 
// ........ 
} 
+0

我認爲你的開關與案件涵蓋所有可能的組合似乎最有可能工作。嵌套如果語句可能會非常棘手以獲得100%正確。不幸的是,仍然需要相當多的情況下(10個可能的情況下3個選項17爲4等) – Stumbler

1

目前已經在論壇上類似的東西 - >get-rid-of-ugly-if-statements

如果你知道波蘭語,你可以看演示文稿,關於'get-fid-of-if'youtube film from confitura (interesting part is from 25.20)

如果你不知道波蘭語,作者說: a)最重要的是可讀性(不工作,但可讀的代碼更好,比工作和不可讀) b)什麼代碼(最好3個之一)是最好的?這取決於許多條件(例如,如果您與大學生一起工作,最好的方法很簡單,如果您爲圖形引擎編寫代碼,請使用'數學')。

p.s.在C#如果聲明,你不neet寫'=真'

if ((checkbox1)&&(checkbox2)&&(checkbox3) 
blah