2011-11-04 137 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