1

リファクタリングの方法がわからないコードがあります。あまり読みにくいので、読みやすくしたいと思います。ここに問題があります

データベースには2つの列があり、NULL、0、またはそれぞれ値を持つことができます。Webページには、これら2つの列のそれぞれにチェックボックス(有効化とテキストボックス)の値があります。

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

いくつかの論理的なandとnotを使用すると、より読みやすいものが得られます。デフォルトで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 に答える
2

ここでの1文字よりもわかりやすい名前を使用すると役立つと思いますが、これが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 に答える