Design patterns 为什么;只有一次退货;?

Design patterns 为什么;只有一次退货;?,design-patterns,coding-style,Design Patterns,Coding Style,今天我收到一位高级开发人员的代码评审意见,他指出的一点是,每个函数应该只有一个返回语句。我想知道这是否只是代码风格的问题,还是存在安全问题,即潜在的函数堆栈问题或未初始化的变量。有人能提供一个例子(我更喜欢C\C++\C#)来说明多重返回语句的缺点吗?非常感谢 在汇编中,所有函数在函数开头设置堆栈后都必须恢复堆栈。这意味着,除非您愿意多次编写清理堆栈代码,否则无法从函数中逃脱,这对空间效率来说不是太好 这只适用于实际具有参数或调用其他函数或存储局部变量的函数,平面系统程序集可以随时返回 只需一个

今天我收到一位高级开发人员的代码评审意见,他指出的一点是,每个函数应该只有一个返回语句。我想知道这是否只是代码风格的问题,还是存在安全问题,即潜在的函数堆栈问题或未初始化的变量。有人能提供一个例子(我更喜欢C\C++\C#)来说明多重返回语句的缺点吗?非常感谢

在汇编中,所有函数在函数开头设置堆栈后都必须恢复堆栈。这意味着,除非您愿意多次编写清理堆栈代码,否则无法从函数中逃脱,这对空间效率来说不是太好

这只适用于实际具有参数或调用其他函数或存储局部变量的函数,平面系统程序集可以随时返回

只需一个条目和一个返回,尽可能少的循环和跳转,并且有目的地推理程序的正确性,就容易多了。多个return语句会让很多人感到厌烦(不过人们仍然能够适应)


我不认为多重返回是邪恶的,有时它们是必要的,而且在很多情况下,它们是有意义的,比如阶乘程序。

谷歌搜索会花费数小时阅读这个主题。简短的版本是,许多旧语言只允许一个返回点。此外,在较旧的过程编码样式中,通常有数千行长的方法。即使这不是语言要求,但许多人发现,如果每个方法的底部都有一个返回,那么阅读代码就更容易了

快进到今天。如果您遵循的是面向对象的最佳实践,主要是单一责任原则,那么您的方法应该<50行且易于阅读。拥有多个返回点不是问题。事实上,它们有助于防止深度嵌套的代码


我就到此为止;我刚注意到。读一读。

这个问题可能更适合codereview.stackexchange.comIIRC(快速的谷歌搜索没有找到任何结果,我也不记得我在哪里读到过),这是因为旧的C或Fortran编译器或其他东西如果你有多个返回值,会变得很麻烦。但如今,这已经不是问题了。我想说,反对多重回报是荒谬的,但话说回来,有些人有多页方法,在这种情况下,我明白为什么它会让你不高兴(尽管真正的问题是你的方法太疯狂了)。这可能适用于任何没有垃圾收集的语言。我的编码风格是在所有独立路径上返回,而不是使用“返回值变量”,这在带有单个返回语句的样式中通常是必需的。这实际上意味着我的许多函数都有多个return语句。我主要使用C#和JavaScript:这在一种需要手动清理路径的语言(cough C cough)中可能不太管用。FWIW:在我的书中,该页面上被接受的答案实际上是uhg模式。我不知道uhg模式是什么,但我一直使用guard子句。早点返回。在这种情况下,我会对每个if-else进行分支(很少有例外),并返回两条不同的路径。我喜欢多个返回点。我不喜欢不在“叶节点”上的返回点。也许这只是“受函数语言影响的偏好”。。但对我来说仍然是一种模式。