Вопрос по function, php, return – Почему мы всегда должны возвращать значения из функции?

5

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

@diEcho - эта ссылка на руководство вообще не отвечает на этот вопрос ... Lix
В отличие от того, что делать? Duniyadnd
Это довольно субъективно и, вероятно, лучше подходит дляprogrammers.stackexchange.com & # X2014; Не удивляйтесь, если люди проголосуют за его закрытие. Mahn

Ваш Ответ

7   ответов
6

чтобы была определенная конечная точка для функции. Это главным образом для того, чтобы улучшить читаемость и помочь будущим программистам понять, что вы пытаетесь сделать.

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

6

C (++), многие из них не будут (ну, явно):

void nonReturningFunction(const int *someParam);
int main()
{
    int i = 12;
    nonReturningFunction(&i);
    return 0;
}
void nonReturningFunction(const int *someParam)
{
    printf("I print the value of a parameter: %d",someParam);
}

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

Та же логика применима к PHP или любому другому языку программирования. Некоторые функции & apos; возвращаемое значение имеет значение, другая функция может не требовать возврата чего-либо. В общем случае функции возвращают значения, потому что они имеют отношение к потоку вашей программы.

Возьмите класс, например:

<?php
    class Foo
    {
        private $foo,$bar;
        public function __construct()
        {
            $this->foo = 'bar';
        }
        public function getFoo()
        {
            return $this->foo;//<-- getter for private variable
        }
        public function getBar()
        {
            return $this->foo;//<-- getter for private variable
        }
        public function setBar($val = null)
        {
            $this->bar = $val;
            return $this;//<-- return instance for fluent interfacing
        }
        public function setFoo($val = null)
        {
            $this->foo = $val;
            return $this;
        }
    }
    $f = new Foo();
    $f->setFoo('foo')->setBar('bar');//<-- fluent interface
    echo $f->getFoo();
?>

Если функция установки не вернула ничего, вам нужно написать:

$f->setFoo('foo');
$f->setBar('Bar');

Так что в этом случае возвращаемые значения актуальны. Другой пример, когда они не имеют отношения к делу:

function manipulateArray(array &$arr)//<-- pass by reference
{
    sort($arr);
}
$arr = range('Z','A');
manipulateArray($arr);
var_dump($arr);//array is sorted

в отличие от:

function manipulateArray(array $arr)//<-- pass by copy
{
    sort($arr);
    return $arr;
}
$arr = range('Z','A');
manipulateArray($arr);
var_dump($arr);//array is not sorted!
$arr = manipulateArray($arr);//<-- requires reassign

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

7

таких как Fortran, вам всегда приходилось возвращать что-то с типом, то есть int, float, bool и т. Д. Начиная с C вы можете вернуться с помощью & quot; void & quot; type, и это значение по умолчанию в большинстве функций C, если вы не указали оператор return, он возвращает с void в конце. Например, в Java вы должны указать тип возвращаемого значения, а затем вернуться с этим типом. Если вы не хотите что-либо возвращать, вы используете «void». тип:

//This works
public void boo() {
   return;
}


//This gets you an error
public int boo() {
   return;
}

//This gets you an error too, because you must specify a type for any function in Java
public boo() {
   return;
}

Так что это больше похоже на то, что сказал Ликс, если у вас есть что-то, с чем можно вернуться. В большинстве функциональных программ ваши функции могут возвращаться либо с данными, либо с верным / ложным обозначением успеха или неудачи. Во многих системах функция может возвращать int, указывающий на успех или неудачу, например «1». или '-1'. Программы оболочки Unix используют это.

В других языках, таких как PHP, вам не нужно ничего возвращать, но в фоновом режиме PHP по-прежнему присоединяет «void». введите возвращаемое значение для вашей функции, вам просто не нужно явно писать его.

Надеюсь это поможет

Это объясняет все возвращение 0 вместо пустоты, которую я видел в последнее время.
3

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

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

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

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

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

0

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

Поскольку вопрос состоял в том, почему мы должны ВСЕГДА возвращать значение, дело не в том, почему иногда полезно возвращать значение, а в том, что существует причина требовать, мы всегда должны возвращать значение, и для ВСЕГДА возврата нет веской причины. значение из функции.

2

echoИнг противreturnизнутри функции. С, скажем, вернулсяtrue или жеfalse С помощью функции вы можете изменять способ отображения вещей в представлениях любым нужным вам образом. Эхо-строка не дает вам такой гибкости.

5

Это лучше для вашей архитектуры: функция принимает параметры, работает с ними и возвращает ожидаемый результат. Таким образом, вы можете использовать его и упорядочить свой код.

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

Похожие вопросы