Возврат результата в программировании. "Вычислимость" выражения, вызова -- что это. Что значит что функция возвращает значение

В коде программы все что вы видете можно разделить на:

  1. действия (или имена действий , например вызовы процедур, функций, или обращение к операторам)
  2. данные для этих действий (например, литералы) или имена за которыми скрываются данные (например, переменные)

Некоторые действия вместе с данными образуют выражения или вызовы подпрограмм. И первые и вторые "возвращают значение".

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

Выражения и их значения (как "возвращаемые")

В случае с операторами (с помощью них и строятся выражения, в частности арифметические), понятно, что, например, знак "+" возвращает результат, суммы, т.е. что во многих ЯП в переменную "a" будет возвращена сумма, например (синтаксис Паскаля):

a := 5 + 2;

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

Что значит "функция" возвращает значение. Возврат значений подпрограммой

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

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

a = f1();

или как часть выражения, например:

a = 5 + f1();

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

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

Пример бесполезной функции (синтаксис PHP)

Например:

function Sum($num1, $num2) {
 $total = $numX + $numY;
}

-- тут результат попадает в локальную переменную total, но эта переменная остаётся в изолированной области памяти (никак не используется, да и функции вообще нет return), а потому наружу, с случае попытки использовать результат работы этой функции будет возвращён null:

$a =  Sum(5,  2); // == null

Чтобы использовать такую функцию (сделать её "полезной") полученную сумму нужно вернуть явно:

function Sum($num1, $num2) {
 $total = $numX + $numY;
  return $total;
}

(без явной инструкции система не поймёт что именно возвращать, ведь функция может быть очень сложной, в ней может быть большое количество переменных), также в данном случае можно было сразу вернуть результа выражения, без использования локальной переменной total:

function Sum($num1, $num2) {
 return $numX + $numY;
}