为什么“返回”结束功能

时间:2019-02-18 16:49:53

标签: function return

我很好奇return为什么终止该功能。
为什么我们不写

function Foo (){
BAR = calculate();
give back BAR; 

//do sth later
log(BAR);
end; 
}

我们为什么需要这样做?

function Foo (){
BAR = calculate(); 
log(BAR);
return BAR;
}

这是为了防止在函数中多次使用give back/return value吗?

2 个答案:

答案 0 :(得分:1)

函数 的思想源于数学,例如x = f(y)。在为f(y)的特定值计算了y之后,您可以简单地将该方程式中的值替换为相同的结果,例如x = 42。因此,具有一个结果一个返回值的函数的概念非常强大。此外,此类数学函数是 pure ,表示它们没有副作用。在上面的公式中,无论您写f(y)还是计算结果42都没有影响,该函数不会做其他任何事情,因此不会改变结果。能够做出这些假设使推理公式和程序变得更加容易。

return在编程中也具有实际的实现意义,因为大多数语言通常基于不需要进一步的假设/限制而在返回时弹出堆栈。

许多语言的确允许函数“吐出”一个值并继续下去,通常将其实现为生成器和yield关键字。但是,生成器通常不会简单地继续在后台运行,需要再次显式调用生成器以产生下一个值。 控制权转移是必要的;要么生成器运行,要么其调用者运行,它们不能同时运行。

如果您确实想同时运行两段代码(是生成器或函数的“ return之后”),则需要确定一种多任务处理方式,例如线程化或协作式多任务处理(异步执行) )或其他内容,这带来了管理共享资源访问等所有有趣的困难。虽然编写一种可以隐式且优雅地处理该语言的语言并非不可思议,但优雅的隐式多任务处理能够自动地解决所有这些困难,根本不适合大多数C语言。这可能是导致简单的堆栈弹出,函数终止return语句的众多原因之一。

答案 1 :(得分:0)

使用return为您提供了很大的灵活性,使您可以在何处,何时何地以及如何返回函数的值,以及易于理解的“我现在正在返回该值”的语句。

如果按照您的想法,您可能会遇到一种情况,即该函数被评估为某个值,并且您必须确定该分配是否在流程的某个位置发生了更改。