我很好奇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
吗?
答案 0 :(得分:1)
函数 的思想源于数学,例如x = f(y)
。在为f(y)
的特定值计算了y
之后,您可以简单地将该方程式中的值替换为相同的结果,例如x = 42
。因此,具有一个结果或一个返回值的函数的概念非常强大。此外,此类数学函数是 pure ,表示它们没有副作用。在上面的公式中,无论您写f(y)
还是计算结果42
都没有影响,该函数不会做其他任何事情,因此不会改变结果。能够做出这些假设使推理公式和程序变得更加容易。
return
在编程中也具有实际的实现意义,因为大多数语言通常基于不需要进一步的假设/限制而在返回时弹出堆栈。
许多语言的确允许函数“吐出”一个值并继续下去,通常将其实现为生成器和yield
关键字。但是,生成器通常不会简单地继续在后台运行,需要再次显式调用生成器以产生下一个值。 控制权转移是必要的;要么生成器运行,要么其调用者运行,它们不能同时运行。
如果您确实想同时运行两段代码(是生成器或函数的“ return
之后”),则需要确定一种多任务处理方式,例如线程化或协作式多任务处理(异步执行) )或其他内容,这带来了管理共享资源访问等所有有趣的困难。虽然编写一种可以隐式且优雅地处理该语言的语言并非不可思议,但优雅的隐式多任务处理能够自动地解决所有这些困难,根本不适合大多数C语言。这可能是导致简单的堆栈弹出,函数终止return
语句的众多原因之一。
答案 1 :(得分:0)
使用return
为您提供了很大的灵活性,使您可以在何处,何时何地以及如何返回函数的值,以及易于理解的“我现在正在返回该值”的语句。
如果按照您的想法,您可能会遇到一种情况,即该函数被评估为某个值,并且您必须确定该分配是否在流程的某个位置发生了更改。