Подтвердить что ты не робот

Какая разница между "return" и "no return"?

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

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

и

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

Оба имеют NULL как "возвращаемое значение". Есть ли разница? Что-то PHP внутри? Представление? Скорость?

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

4b9b3361

Ответ 1

php code

<?php

function a() {
   echo 1;
   return;
}

function b() {
   echo 2;
}

сгенерированный bytecode

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

.FUNCTION b
        ECHO                     2
        RETURN                   NULL
        HANDLE_EXCEPTION         
.END FUNCTION

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

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

В вашем примере это личное предпочтение, если вам нравится return или нет.

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

sub foo {
  return 12;
}

sub foo2 {
  12;  # same thing
}

Ответ 5

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

Ответ 6

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

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

return true;

или

return $var;

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

Ответ 7

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

Однако существует разница, когда выбранным языком программирования является C/С++, Java, С#, где нет возврата означает void

Ответ 8

Как только вызывается return, вызов функции прекращается. Он действует как перерыв. Поэтому, если ваше возвращение находится посередине, оно получит некоторую производительность, потому что остальная часть функции не будет выполнена.

В остальном часто лучше (с точки зрения читаемости) использовать явный возврат вместо неявного. Если вы сохраните возврат в функции, вы узнаете, что вызов этой функции может ожидать возвращаемое значение.

Ответ 9

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

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

    // could be more code
}

Ответ 10

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

class foo {
  var $name;

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

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

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

Ответ 11

Очень интересно (я думаю), наличие типа возврата имеет большое значение. Три вида возврата 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.