Идея функции проистекает из математики, например, x = f(y)
.Как только вы вычислили f(y)
для конкретного значения y
, вы можете просто заменить это значение в этом уравнении на тот же результат, например, x = 42
.Таким образом, понятие функции, имеющей один результат или одно возвращаемое значение , довольно сильно.Кроме того, такие математические функции pure , что означает, что они не имеют побочных эффектов .В приведенной выше формуле не имеет значения, пишете ли вы f(y)
или ее вычисленный результат 42
, функция не делает что-либо еще и, следовательно, не изменит результат.Возможность сделать эти предположения значительно упрощает анализ формул и программ.
return
в программировании также имеет практические последствия для реализации, так как большинство языков обычно загружают стек при возврате, исходя из предположения / ограничения, что он больше не нужен.
Многие языки допускаютфункция, которая «выплевывает» значение, но продолжает работу, что обычно реализуется как генераторы и ключевое слово yield
.Однако генератор, как правило, не просто продолжает работать в фоновом режиме, его нужно явно вызывать снова, чтобы получить его следующее значение. передача управления необходима;или генератор работает, или его вызывающая сторона, они не могут работать одновременно.
Если вы хотите запустить два куска кода одновременно, будь то генератор или функция «после return
блока»вам нужно выбрать режим многозадачности, такой как многопоточность, совместная многозадачность (асинхронное выполнение) или что-то еще, что приносит с собой все забавные трудности управления доступом к общим ресурсам и тому подобное.В то время как немыслимо написать язык, который бы обрабатывал это неявно и элегантно, элегантная неявная многозадачность, которая автоматически управляет всеми этими трудностями, просто не вписывается в большинство C-подобных языков.Это, вероятно, одна из многих причин, приводящих к простому выталкивающему стеку, завершающему функцию оператору return
.