удаление вложенности операторов if - PullRequest
1 голос
/ 05 ноября 2011

У меня есть кусок кода, который я не уверен, как реорганизовать. Он не очень читабелен, и я хотел бы сделать его читабельным.Вот проблема

В базе данных есть два столбца, которые могут иметь значение 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;
   }
}

Поверьте мне, это допустимый сценарий.Дайте мне знать, если это имеет смысл, или я должен дать больше информации

Ответы [ 2 ]

2 голосов
/ 05 ноября 2011

Я думаю, что это помогло бы использовать больше описательных имен, чем отдельные буквы здесь, но если предположить, что это код на C, это выглядит намного лучше со встроенными операторами if:

if(x)
{
   a = z ? NULL : z;
   b = (y && w) ? w : NULL;
}
else
{
   a = y ? NULL : 0;
   b = (y && w) ? w : 0;
}
2 голосов
/ 05 ноября 2011

Используя некоторые логические символы, мы получаем что-то более читаемое.Мы можем немного сэкономить, по умолчанию установив 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
...