2015-07-13 2 views
0

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

if(a>0 && b>0 && c>0) 
{ 
    if(a==d && b==e && c==f) 
    { 
     if(a<FIELD_HEIGHT && b<FIELD_WIDTH) 
     { 
      if(true) 
      { 

      } 
     } 
    } 
} 
+1

Термин вы ищете, чтобы уменьшить * вложенности * , а не размер кода (какой тип подразумевает меньше машинного кода, генерируемого компилятором).И ответ очень сильно зависит от того, что происходит внутри блоков 'if', только более' if' или чего-то еще? –

+0

@JoachimPileborg Да, мне нужно избегать так много утверждений, если это возможно. Но в моем случае у меня есть 3 разные группы, которые проверяют разные вещи, и когда я писал их все, это выглядит большим для меня, поэтому я хочу уменьшить размер кода. –

+0

https://www.google.nl/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=how%20to%20reduce%20if%20else%20statements – moffeltje

ответ

3

Вы можете использовать логический оператор (&&):

if (cond1 && cond2 && cond3) { 
    // action 
} 

Что эквивалентно:

if (cond1) { 
    if (cond2) { 
    if (cond3) { 
     // action 
    } 
    } 
} 

Это полезно до тех пор, пока вы не нуждаетесь в else положение специфичны для любого этих условий.

условия будут evaulated с левой стороны, так что если cond1 будет false, cond2 и cond3 не будут оценены.


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

int isCar = has4Wheels && hasBreaks && hasEngine; 
int isASportsCar = hasLargeEngine && hasLowSuspension && hasManualControls; 
int isFerrari = isV12 && isRed && hasANiceLogo; 

if (isCar && isASportsCar && isFerrari) { 
    // action 
} 

Пример может быть немым, но вы поняли суть.

+0

"* Dump *"? Нет, это правда! Я бы поддержал это снова для хорошего примера в вашем редактировании ...! :-) – alk

+0

@alk Это волшебство Ferrari: D – kamituel

1

Как ваш фрагмент кода не имеет никакого else stetement, вы можете уменьшить ваш код

if (<condition1> && <condition2> && <condition3>) 

и так далее.

+0

да, но у меня есть много таких условий, как вы писали, проверяя разные вещи, которые невозможно записать вместе –

+0

@MasterYoda и как это точно? Вы можете показать пример? –

+1

@MasterYoda: "* .. которые не могут быть записаны вместе *" почему бы и нет? Возможно, вам захочется показать детали, если они важны. Это не угадающая игра. – alk

1

Поскольку вы не имеете еще пункт, связанный с тем, если, как раз и все условия вместе, как:

if (thisCondition && thatCondition ..) {} 
0
  1. Если переменные a, b, c объявлены unsigned, что будет уменьшить if.
  2. Если конкретные остальное блоки нет, два, если заявления могут быть объединены

Вы можете уменьшить свой код

unsigned a, b, c; // if declared as unsigned or if d, e, f are known to be positive 

if (a == d && b == e && c == f && a < FIELD_HEIGHT && b < FIELD_WIDTH) { 
    ... 
} 
0

Вслед за my comment here:

if ( (a>0 && a<FIELD_HEIGHT && a==d) 
    && (b>0 && b<FIELD_WIDTH && b==e) 
    && (c>0 && c==f) 
    ) 
{ 
    ... 
} 

и при условии, что varibales были unsigned целые числа:

if ( (a && a<FIELD_HEIGHT && a==d) 
    && (b && b<FIELD_WIDTH && b==e) 
    && (c && c==f) 
    ) 
{ 
    ... 
} 
0

Я думаю, что это нормально:

if(a>0 && b>0 && c>0) 
{ 
    if(a==d && b==e && c==f) 
    { 
     if(a<FIELD_HEIGHT && b<FIELD_WIDTH) 
     { 

     } 
    } 
} 

в вашем коде, последнее суждение: «если (истина)» является излишним

Смежные вопросы