Что лучше?if..else или несколько простых if - PullRequest
6 голосов
/ 10 ноября 2010

говорить о производительности Java .. что лучше? if..else или несколько простых if

if( condition ) {
  some_code;
  return value;
}
else if( condition ) {
  some_code;
  return value;
}
else if( condition ) {
  some_code;
  return value;
}
else {
  some_code;
  return value;
}

или

if( condition ) {
  some_code;
  return value;
}

if( condition ) {
  some_code;
  return value;
}

if( condition ) {
  some_code;
  return value;
}

some_code;    
return value;

Интересуют ваши мысли

Спасибо!

Ответы [ 5 ]

16 голосов
/ 10 ноября 2010

Различий в производительности нет.Выберите наиболее читаемый вариант, который может зависеть от того, что делает код.

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

"Мы должны забыть о небольших показателях эффективности, скажем, в 97% случаев: преждевременная оптимизация является корнем всего зла ".Дональд Кнут

1 голос
/ 10 ноября 2010

Приведенный вами пример if ... else не нуждается в return s, если это функция без возвращаемого значения.В этом случае if ... else будет легче читать.

Более того, if ... else должно быть предпочтительнее, поскольку в нем четко указано, что эти случаи являются взаимоисключающими.

Если здесь разница в производительности, то ваш компилятор / интерпретатор отстой.

0 голосов
/ 10 ноября 2010

Я бы не беспокоился о производительности, а также о удобочитаемости и удобстве сопровождения кода.Как уже упоминалось, производительность будет практически одинаковой после компиляции кода.

Я предпочитаю быть более точным в отношении моих условий, вместо того, чтобы неявно "проваливать" поведение поведения.* Кроме того, сингл if не будет оцениваться быстрее, чем if else.Путь else никогда не будет проверен, если регистр равен true.

0 голосов
/ 10 ноября 2010

Зависит от ситуации.

Если условия являются взаимоисключающими, используйте else.Это приведет к тому, что Java не будет проверять какие-либо условия после того, как установлено, что оно истинно.

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

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

0 голосов
/ 10 ноября 2010

Я уверен, что один if будет лучше, потому что всякий раз, когда встречается истинное условие, он может безопасно пропустить другие else альтернативы, так как они не будут выполнены. Если бы вы использовали несколько if s, все последующие условия должны были бы быть оценены в любом случае (даже если, как вы думаете, они будут взаимоисключающими). ​​

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