我是初学者,你可以看到......我需要知道何时使用return语句。
互联网上的每个人都在问 - 返回陈述的用途是什么 - 并且所有问题都是不正确的,这给出了错误的答案。到目前为止,我还没有找到一个简单易懂的答案。我们所有的初学者,看到一个函数输出一个结果,我们看到它的行为是相同的返回它。所有的答案都是错误的,因为它们只是定义了一个返回语句是什么,并且它们没有并列相反的上下文。我想知道的是,两者的背景。在我看来,所有函数都需要“返回”或“输出”一些值,否则就没有目的就是首先执行一个函数(意味着这两个函数具有相同的功能)。在我看来,即使没有返回值,函数的输出仍然可以被操作以用作返回值。所以他们显然做同样的事情。
另外,如果你告诉我return语句是函数的“结束”,那么你必须告诉我只返回一个嵌套子函数的值的优点(当该输出不是全局的时) 。如果返回是全局的,我只看到返回子函数的上下文。请澄清这些返回值是全局的,如果不是全局的,为什么在函数中使用return语句而不是条件语句(不返回)?
同样,我是一个初学者...所以请,没有定义,只有在更大的背景下链接它的间接答案。
提前感谢您抽出时间:)
答案 0 :(得分:0)
函数有两种影响世界的方法(在大多数编程语言中):
1)他们可以通过将结果返回给他们的来电者来影响世界
2)他们可以通过改变一些共享的全局状态(全局变量,静态变量,单例等)来影响世界。
以下是第一种情况的示例:
int square(int i) {
return i * i;
}
在这里,使用return
语句是显而易见的选择。 square
函数改变任何类型的全局状态是没有意义的。
void closeCurrentWindow() {
Window currentWindow = getCurrentWindow();
currentWindow.close();
}
在这里,closeWindow
通过改变全局状态对世界产生影响。它获取对当前窗口的引用,并将其关闭。它有一个void
返回类型,它没有return语句,因为它不打算将任何信息传回给调用者。
还有两种功能:
bool print(Document d) {
printer.print(d);
return printer.didPrintSucceed(d);
}
在这种情况下,修改全局状态(打印机被告知打印d
),和返回一个值,指示打印是否成功。
改变全局状态的函数很棘手,因为它们要求您在试图弄清楚它们的行为方式时考虑更广泛的上下文。 纯函数背后越来越受欢迎。
纯函数是仅通过参数获取输入的函数,仅通过它们返回的输出影响世界。 square
函数是一个这样的函数的示例。当你看它时,你可以看到它没有引用全局状态,所以即使你自己考虑它,你也可以完全理解这个函数的行为。
其他两个示例不是这种情况,因为它们引用了全局状态,例如getCurrentWindow()
和printer
。如你所知,它们可能是null
并导致崩溃。要了解他们是否崩溃,您需要更广泛的理解:您需要了解getCurrentWindow()
和printer
的状态,以确保它们不是null
在通话时。
答案 1 :(得分:0)
大多数语言的返回大约有两件事:1)将控制权返回给调用函数(涉及恢复其局部变量上下文)和2)将值(计算结果)分配给商定的位置(这通常是可选 - void函数(C / C +)不这样做;在系统语言中,您可以写入内存位置作为函数的副作用 - 您不需要return
为此)。
所以当你需要做这些事情时你就会返回,如果你使用函数你就需要做这些事情,因为函数是构造和重用代码的好方法。
IO还允许您将一些数据提供给您想要的位置,但它是返回(或直接内存写入)的相当重量级的替代方案,因为它需要涉及内核。 IO不是将控制权返回给调用函数。
答案 2 :(得分:0)
Layman的术语回答:返回语句意味着函数嵌套(更深)在更大的范围内,以便成为更大的东西的一部分,并且需要在更大的范围内返回结果。因此,返回语句通常是嵌套堆栈中的最后一个函数,它可以返回其值以带来最终结果。然而,当没有return语句时,它通过在其中嵌套其他过程而被用作更大的范围。这一切都取决于函数在更大的图像中的位置,以及函数是否意味着在一系列序列中得出最终答案。换句话说,非返回函数充当对象容器而不是确定/有限答案。