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

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

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

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

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

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

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

a := 5 + 2;

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

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

Понятие возврата значений очень тесно связано с понятием области видимости.
Дело в том, что во многих ЯП код функции выполняется в изолированной области памяти и все переменные, которые передаются в функцию (если только это не передача "по ссылке"), как бы "копируются" в изолированное пространство, никак не влияющее на жизнь вызвавшего функцию кода, поэтому чтобы вернуть результат работы функции наружу часто используют какое-то специально слово, например 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;
}