2013-07-26 2 views
0

Я часто структурировать свой код так:Вложенные если-заявления против альтернативной структуры кода (влияет на производительность?)

public void doSomething() { 
    if (!condition1) { 
     println("problem 1"); 
     return; 
    } 
    if (!condition2) { 
     println("problem 2"); 
     return; 
    } 
    if (!condition3) { 
     println("problem 3"); 
     return; 
    } 

    // code to run if 
    // everything is OK 
} 

, а не гнездятся, как это:

public void doSomething() { 
    if (condition1) { 
     if (condition2) { 
      if (condition3) { 
       // code to run if 
       // everything is OK 
      } 
      else { 
       println("problem 3"); 
      } 
     } 
     else { 
      println("problem 2"); 
     } 
    } 
    else { 
     println("problem 1"); 
    } 

} 

Есть ли польза для одного над другим? Является ли еще один «правильный», чем другой? Благодаря!

+0

общественного недействительными йоЗотеЬЫпд() { \t если (condition1 && && condition2 condition3) { \t \t \t // код для запуска, если // все в порядке \t} еще если (! Condition1) { \t \t println («проблема 1»); \t} else if (! Conditoin2) { \t \t println ("проблема 2"); \t} else { \t \t println ("проблема 3"); \t} } – Veera

+0

Изменение структуры ветвления не приведет к улучшению производительности ИМО. Скорее сосредоточиться на Readability по сравнению с такой микро-оптимизации. Найдите некоторые основные возможности оптимизации в своем коде. –

+0

@ Juvanis, эти два примера приведут к точному выходу. О чем ты говоришь? – BLuFeNiX

ответ

0

Любая структура кода в порядке, но наличие нескольких операторов return добавляет еще один уровень сложности при отладке и может быть более подверженным ошибкам при вводе и/или редактировании кода.

0

всякий раз, когда я вижу, если множественным, я думаю о переезде в switch заявлений, более readability..and избежать многократного повторяется .... если слова ....

+1

его, поскольку код в удовлетворительном состоянии может работать до 100 строк строк кода и становится очень трудным отследить запуск и заканчивая скобки ... –

0
if(condition1){ 

} else if(condition2){ 

} else if(condition3){ 

} else { 

} 

или использовать операторы коммутатора. Здесь нет существенного преимущества в производительности. Используйте ту, которая более читаема/подходит в вашей ситуации. Еще одна вещь, которую я должен добавить, заключается в том, что в некоторых случаях операторы switch быстрее, чем при if..else, вы будете проверять разные предложения до тех пор, пока не достигнете одного совпадения, или нет совпадения вообще.

+0

Это также может работать, но иногда я хочу делать что-то прямо перед if-statement (например, объявлять переменную), поэтому я использую несколько 'if' и 'return' вместо 'else if '. – BLuFeNiX

+0

Вот пример того, почему я думаю, что должен это сделать: http://pastebin.com/22hx0NrR, пожалуйста, советую. – BLuFeNiX

+0

@BLuFeNiX Это выглядит немного разбросанным по мне. Это нормально использовать несколько возвратов/выходов в методе, но он может быть оскорбительным и требует немного дополнительной осторожности.представьте, что вы забыли поставить оператор возврата в одном из ваших if's в коде, а затем распечатали «Все нормально!» когда это не так. –

1

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