Что лучше? if..else или несколько простых if

говоря о производительности 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;
}

or

if( condition ) {
  some_code;
  return value;
}

if( condition ) {
  some_code;
  return value;
}

if( condition ) {
  some_code;
  return value;
}

some_code;    
return value;

Заинтересованы в ваших мыслях

Спасибо!


person dnlmax    schedule 09.11.2010    source источник
comment
Если и есть разница в производительности, то она, вероятно, незначительна.   -  person Felix Kling    schedule 10.11.2010
comment
Я не эксперт, но я был бы удивлен, если бы была какая-то разница, но ответ на все вопросы о производительности - попробуйте сами и убедитесь. (И другой ответ: это, вероятно, не ваше узкое место.) Для меня это вопрос стиля.   -  person Cascabel    schedule 10.11.2010
comment
Неважно, какой_код, только как java выполняет оператор if   -  person dnlmax    schedule 10.11.2010
comment
Вы также можете выбрать один return в конце примера if...else if...   -  person Jeremy    schedule 10.11.2010
comment
предположим, что возвращаемые значения могут быть разными   -  person dnlmax    schedule 10.11.2010
comment
Я держусь подальше от elseif/else if для удобочитаемости. И постарайтесь придерживаться одного оператора возврата в конце функции. Принцип: 1. Получите входные данные, 2: посчитайте, 3: верните результат.   -  person Teson    schedule 01.02.2021


Ответы (5)


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

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

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

person John Kugelman    schedule 09.11.2010

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

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

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

person uckelman    schedule 09.11.2010
comment
Если есть разница в производительности, то компилятор отстой. - person starblue; 10.11.2010
comment
Может быть переводчиком для интерпретируемого языка. - person uckelman; 10.11.2010

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

person MartinodF    schedule 09.11.2010
comment
Но в этом примере они все равно не будут выполняться, потому что функция возвращается до того, как они будут достигнуты. - person Andrew Cooper; 10.11.2010
comment
В любом случае, в этом примере это не имеет значения, так как в каждом теле if есть оператор return. - person Felix Kling; 10.11.2010
comment
Но он все равно может это сделать из-за формы конструкции «возврат». - person ; 10.11.2010
comment
Да, но если лучше == на 1 мс быстрее, кто заметит? - person Michael Todd; 10.11.2010
comment
Пропустил returns. Тогда не должно быть существенной разницы в производительности. Следите за читабельностью кода;) - person MartinodF; 10.11.2010

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

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

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

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

person Alan Geleynse    schedule 09.11.2010
comment
Не имеет значения, являются ли условия взаимоисключающими. (Если бы в каждом предложении «тогда» не было возврата...) - person Stephen C; 10.11.2010

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

Я предпочитаю быть более явным в своих условиях, вместо того, чтобы позволять поведению неявно «проваливаться».

Кроме того, одиночный if не будет оцениваться быстрее, чем if else. Путь else никогда не будет проверяться, если это верно.

person Donald    schedule 09.11.2010