我有一段代码,我不知道如何重构。它不是很易读,我想让它可读。这是一个问题
数据库中有两列可以是NULL,0或每个都有一个值。在网页上有一个复选框 - 启用和文本框 - 这两列中的每一列的值。
x = checkbox1
z = textbox1
y = checkbox2
w = textbox2
逻辑是如果未选中两个复选框,则两个值都应为0.如果选择了其中一个而其他未选中,则其他值应为NULL。对于选中的那个,如果文本框为空,则其值应为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;
}
}
相信我这是一个有效的方案。让我知道这是否有意义,或者我应该提供更多信息
答案 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
答案 1 :(得分:2)
我认为在这里使用单个字母的更多描述性名称会有所帮助,但假设这是C代码,它看起来与内联if语句相当简洁:
if(x)
{
a = z ? NULL : z;
b = (y && w) ? w : NULL;
}
else
{
a = y ? NULL : 0;
b = (y && w) ? w : 0;
}