2011-11-04 283 views
1

我有一段代碼,我不知道如何重構..它不是很可讀,我想使它可讀。這是一個問題刪除嵌套if語句

數據庫中有兩列可以是NULL,0或每個都有一個值。在網頁上,對於這兩列中的每一列,都有一個複選框 - 啓用和文本框 - 值。

x = checkbox1 
z = textbox1 
y = checkbox2 
w = textbox2 

的邏輯是,如果沒有被選擇兩個的複選框,然後如果任一個被選擇而另一個不是,那麼其他值應爲NULL兩個值應該是0。和所選擇的一個,如果文本框爲空,其值應爲NULL否則應在文本框中

if{x} 
{ 
    if(z) 
    { 
     a = NULL; 
    } 
    else 
    { 
     a = z; 
    } 
    if(y) 
    { 
     if(w) 
     { 
      b=w; 
     } 
     else 
     { 
      b = NULL; 
     } 
    } 
    else 
    { 
     b = null 
    } 
} 
else 
{ 
    if(y) 
    { 
     a = NULL; 
     if(w) 
     { 
      b=w; 
     } 
     else 
     { 
      b = NULL; 
     } 
    } 
    else 
    { 
     a = 0; 
     b = 0; 
    } 
} 

信任我,這是一個有效的方案的價值。讓我知道如果這是有道理的,或者我應該給更多的信息

回答

2

使用一些邏輯和和nots,我們得到更可讀的東西。 我們可以通過默認爲NULL來保存一點(因此不需要將其他設置爲NULL)。我們還可以通過放置代碼來檢查是否設置了文本框,或者在空函數中使用null。

在僞代碼:

a = NULL 
b = NULL 
if (not checkbox1) and (not checkbox2): 
    a = 0 
    b = 0 
if (checkbox1): 
    a = valueornull(textbox1) 
if (checkbox2): 
    b = valueornull(textbox2) 


function valueornull(textbox): 
    if textbox value: 
    return value 
    else: 
    return null 
+0

謝謝..這就是我在找.. – tryurbest

2

我認爲這將有助於使單個字母在這裏使用更具描述性的名稱,但假設這是C代碼,它整潔看起來很多與直列if語句:

if(x) 
{ 
    a = z ? NULL : z; 
    b = (y && w) ? w : NULL; 
} 
else 
{ 
    a = y ? NULL : 0; 
    b = (y && w) ? w : 0; 
} 
+0

謝謝你的答案..它不是C所以沒有三元操作符..它是一個內部服務器端腳本語言 – tryurbest