двойное условие, любой способ сделать его коротким - PullRequest
5 голосов
/ 11 января 2012

Мне часто приходится делать что-то вроде этого,

    if(condition1) {
        if {condition2) { //this condition is repeated again below
          //dosomething here 1 code 1
        }
        else{
           //dosomething here 2 code 2
        }
    }
    else {
       if {condition2) { //same if condition as above 
             //dosomething here 3 code 3
       }
       else{
             //dosomething here 4 code 4
       }
    }

По сути, только проверка того, повторяется ли (условие 2) в обоих случаях, и что-то различное во всех 4 местах, т. Е. Code1, code2, code3, code4 - это разные коды.

Итак, есть ли способ сделать его компактным и читаемым? Или это нормально?

Спасибо.

Пройдя через правки и просмотрев ответы, я задаюсь вопросом, имеет ли этот вопрос вообще смысл. Теперь я чувствую себя глупо.

Ответы [ 2 ]

5 голосов
/ 11 января 2012

Для вашего конкретного случая лучшая альтернатива:

НЕТ ДЛИТЕЛЬНЫХ ПРИМЕНЕНИЙ - действительно для случая, когда дозиметрия здесь 1 была одинаковой с дозометрированием здесь 3

if ( c2 )
{
}
else if ( c1 )
{
}
else
{
}

Для менее простых случаев вы можете сгруппировать условия вместе:

if ( c1 && c2 )
{
} 
else if ( c1 && !c2 )
{
} 
else if ( !c1 && c2 )
{
} 
else if ( !c1 && !c2 )
{
}

, хотя я не знаю, является ли это более читабельным.

Если необходимы дополнительные условия, я могувидел код такой:

do {
   if (c1)
   {
      //....
      break;
   }
   if (c2)
   {
      //....
      break;
   }
   //.....
} while (false);
3 голосов
/ 11 января 2012

НОВЫЙ ОТВЕТ В КАЧЕСТВЕ ВОПРОСА РЕДАКТОР

if ( condition1 && condition2 )
{
  //dosomething here 1 code 1
} 
else if ( condition1 && !condition2 )
{
  //dosomething here 2 code 2
} 
else if ( !condition1 && condition2 )
{
  //dosomething here 3 code 3
} 
else
{
  //dosomething here 4 code 4
}

СЛЕДУЮЩИЙ КОД НЕ ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО, КАК ВОПРОС ИЗМЕНЕН! Я бы сделал:

if(condition2)
{
   if(condition1)
   {
     //dosomething here
   }
   else
   {
     //dosomething here 2, 
     //which might be different than what we are doing above
   }
}

Это для вашего конкретного вопроса, для более сложных проблем решение может быть другим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...