Что быстрее? Пустое заявление или возврат - PullRequest
2 голосов
/ 06 января 2010

Мне всегда было любопытно об этом. Между двумя примерами кода, который является более эффективным процессором? Я понимаю, что разные языки могут быть разными, и мне нужно знать, что ответ в PHP, но мне также любопытно узнать javaScript, CFScript и ActionScript, если ответ будет другим.

Спасибо

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

Пример 1:

if(myVar < 1){
  return;//returned with nothing
else{
  //do something
}

Пример 2:

if(myVar < 1){
  //left blank
else{
  //do something
}

EDIT: Ребята, вы правы, это, вероятно, было бы совершенно ненужным, я спрашиваю это из любопытства больше всего на свете. Я занимаюсь веб-разработкой более десяти лет, и все это в значительной степени самоучка. Я видел много кода с использованием обоих методов от «обученных профессионалов» и задавался вопросом, было ли это личным предпочтением или одна группа людей знала что-то, что другая не знала.

Также это примеры псевдокода. Я спрашиваю о нескольких языках, где детали будут немного отличаться, и тест будет простым, чтобы убедиться, что вы знаете, о чем я спрашиваю. Следует предположить, что эти примеры будут в функции.

Ответы [ 7 ]

13 голосов
/ 06 января 2010

Если вы ищете проблему с производительностью в вашем коде, это , а не это. Если вы не тестировали производительность, у вас нет проблем с производительностью (пока).

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

Обновление : Предположим, что люди, пишущие компилятор, умнее вас (это не всегда так, но в большинстве случаев это работает). Компилятор посмотрит код, который вы написали, и выяснит, как лучше представить его в объектном коде (будь то машинный код или байт-код или какое-либо другое промежуточное представление). Так что, если у вас есть два фрагмента кода, которые означают одно и то же, велика вероятность, что компилятор сгенерирует одинаковые выходные данные в обоих случаях.

2 голосов
/ 06 января 2010

Ускорение возврата быстрее.

Проверьте это

Настройка

function a(){if(true) return; else ;}

проверяемый код

a();

Tear Down

выход


Запущено за 0,042321920394897 секунд. А это Настройка

function b(){if(true) ; else ;}

проверяемый код

b();

Tear Down

выход


Пробег за 0,042132139205933 секунд


Проверено на 100 000 повторений.

2 голосов
/ 06 января 2010

Пока нет никаких операторов после конца блока if..else, я считаю, что они идентичны в большинстве языков.

При этом я склоняюсь к тому, чтобы использовать как можно меньше return операторов, так как я считаю, что мой код становится более читабельным и легче в отладке. Я сомневаюсь, что в этом случае стоит потратить время на то, чтобы позаботиться о своей эффективности - сосредоточиться на том, чтобы сохранить ваш код как можно более чистым.

1 голос
/ 06 января 2010

Я бы предложил использовать «return null»; но не по соображениям скорости, просто потому, что вы можете быть уверены, что функция останавливается, когда вы этого ожидаете. Например, возможно, что вы или кто-то еще измените эту функцию, добавите код вне оператора if и не поймете, что код не должен был выполняться при определенных условиях.

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

0 голосов
/ 04 марта 2011

http://jsperf.com/empty-statement-vs-return

enter image description here

Но на самом деле, к тому времени, когда вы получаете десятки миллионов выполнений в секунду, это действительно преждевременная оптимизация,Было бы намного эффективнее просто сократить такие вещи, как длинные циклы и чрезмерные операции DOM.

0 голосов
/ 06 января 2010

В первом примере вам больше не нужно.

Они должны компилироваться эквивалентно, если компилятор приличный.

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

if (a and b and c and d and e and f)
    do_something()

можно преобразовать в:

if (!a)
   return;

if (!b)
   return;

if (!c)
   return;

if (!d)
   return;

if (!e)
   return;

if (!f)
   return;

do_something();

В моем тривиальном примере первый способ, вероятно, легче читать, но когда a-f являются довольно сложными выражениями, 2-й способ может быть проще для чтения, что приводит к меньшему отступу и т. Д.

0 голосов
/ 06 января 2010

Зависит от того, что происходит и что чаще всего происходит в этой части кода, чтобы получить максимальную эффективность от него.

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