1

我有一段代码,我不知道如何重构。它不是很可读,我想让它可读。这是一个问题

数据库中有两列可以为 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;
   }
}

相信我,这是一个有效的场景。让我知道这是否有意义,或者我应该提供更多信息

4

2 回答 2

2

我认为使用比这里的单个字母更具描述性的名称会有所帮助,但假设这是 C 代码,内联 if 语句看起来更整洁:

if(x)
{
   a = z ? NULL : z;
   b = (y && w) ? w : NULL;
}
else
{
   a = y ? NULL : 0;
   b = (y && w) ? w : 0;
}
于 2011-11-04T22:58:20.287 回答
2

使用一些逻辑与与非,我们得到一些更易读的东西。我们可以通过默认为 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
于 2011-11-04T22:51:50.800 回答