В чем разница между `return;` и no return? - PullRequest
33 голосов
/ 16 мая 2011

Есть ли разница между:

function someMethod( $someArg ) {
  // some code
  return;
}

и

function someMethod( $someArg ) {
  // some code
  // no return
}

Оба имеют NULL в качестве «возвращаемого значения». Есть ли разница? Что-то PHP внутри? Спектакль? Скорость

редактировать
Я спрашиваю, потому что в Zend Framework ( в этом видео ) они используют return;, что мне показалось (кажется) глупым. Тем не менее, вы можете подумать, что люди, стоящие за Zend Framework, знают свой PHP ...

Ответы [ 11 ]

39 голосов
/ 16 мая 2011

php код

<?php

function a() {
   echo 1;
   return;
}

function b() {
   echo 2;
}

сгенерированный байт-код

.FUNCTION a
        ECHO                     1
        RETURN                   NULL
        RETURN                   NULL
        HANDLE_EXCEPTION         
.END FUNCTION

.FUNCTION b
        ECHO                     2
        RETURN                   NULL
        HANDLE_EXCEPTION         
.END FUNCTION

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

11 голосов
/ 16 мая 2011

Насколько я знаю, нет никакой разницы.

Пустой return; в основном там, чтобы выйти из цикла if / else, while или for, не возвращая ничего.

4 голосов
/ 16 мая 2011

Функционально разницы нет, но всегда приятно иметь очевидную точку выхода из функции (возврат). Некоторые школы информатики считают, что все функции и методы должны иметь ровно 1 и только 1 точку выхода.

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

Но, как я уже сказал, с функциональной точки зрения особой разницы нет.

3 голосов
/ 16 мая 2011

В вашем примере нет разницы.

Однако return завершит функцию, поэтому у вас есть возможность пропустить код после оператора return (это его цель).

В вашем примере это личное предпочтение, хотите ли вы видеть return или нет.

Кроме того, в некоторых языках, таких как Perl, последнее выражение «неявно» является возвращаемым значением, поэтому вам даже не нужно использовать «return». (Однако это не будет работать в других языках, таких как C ++.)

sub foo {
  return 12;
}

sub foo2 {
  12;  # same thing
}
1 голос
/ 16 мая 2011

В таких языках, как PHP и Python, нет никакой разницы. return; может использоваться для преждевременного выхода из функции.

Тем не менее, есть разница, когда выбран язык программирования C / C ++, Java, C #, где нет возврата означает void

1 голос
/ 16 мая 2011

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

обычно я использую return с чем-то вроде

return true;

или

return $var;

, и если я не хочу ничего возвращать илиЯ хочу вернуть false Я просто не использую return

1 голос
/ 16 мая 2011

Нет большой разницы, вы можете просто использовать return;, чтобы прервать вызов функции раньше. Они оба вернут NULL в любом случае, это строго для рабочего процесса.

0 голосов
/ 24 апреля 2019

Очень интересно (я думаю), наличие типа возврата имеет большое значение.Три вида возврата null выдают три разные ошибки:

function foo() : string {
  // return nothing

  // TypeError exception: Return value of foo() must be of the type string, none returned
}

function foo() : string {
  return;

  // Fatal error: A function with return type must return a value
}

function foo() : string {
  return null;

  // TypeError exception: Return value of foo() must be of the type string, null returned
}

Я бы не догадался об этом, так как все ошибки являются временем выполнения, а все возвращаемые значения технически null.

0 голосов
/ 21 апреля 2019

Мне иногда нравится использовать «пустой» return в качестве последнего утверждения функции в качестве дружественного напоминания о том, что функция не должна возвращать никакого значения.

class foo {
  var $name;

  public function bar($x) {
    $this->name = $x;
    return;
  }
}

В ADA у вас естьprocedures и functions.Первые не возвращают никаких данных, они просто выполняют некоторые операторы.Функции могут возвращать данные.

Таким образом, пустое значение return будет похоже на «это процедура».

0 голосов
/ 16 мая 2011

возврат прервет / выйдет из функции (думайте, что перерыв как в переключателе / ​​случае)

function someMethod( $someArg ) {
    if(condition) {
        return; // will exit function
    }

    // could be more code
}
...