尽管在这里讨论Should a function have only one return statement?,是否有一些简单的提示或方法只保留一个return语句?或者如何将多个return语句重构为只有一个return语句?
答案 0 :(得分:1)
首先,不清楚为什么要这样做,因为在线程中已经提到过,由于某些原因,现代语言中添加了此功能,并允许用户获得更多功能。
wiki说了很多:
有些人确保每个功能都有一个条目,单个退出 (SESE)。这些人认为使用退货声明是违反的 结构化编程:它是一个非结构化的函数退出, 导致多个退出点,而不是单个退出点 结构化编程所需。因此有人认为[5] 一个人应该避免使用显式return语句,除了at 一个子程序的文本结束,考虑到它何时习惯 "早退,#34;它可能遇到同样的问题 出现在GOTO声明中。相反,可以认为使用 当替代方案更多时,返回声明是值得的 复杂的代码,例如更深的嵌套,损害了可读性。
其他人说一个或多个"保护条款" - 有条件的 "提前退出"在函数开头附近返回语句 - 通常使函数比替代函数更容易阅读。[6] [7] [8] [9]
提前退出的最常见问题是清理或最终解决 语句不会被执行 - 例如,分配的内存不是 未分配或打开的文件未关闭,导致泄漏。这些必须 在每个返回站点完成,这是脆弱的,很容易导致 错误。例如,在以后的开发中,可以使用return语句 被开发人员忽视,以及应该执行的操作 子程序(例如,跟踪语句)的结尾可能不是 在所有情况下都执行。没有返回语句的语言,例如 标准Pascal没有这个问题。有些语言,比如C ++ 和Python,使用允许执行操作的概念 返回(或异常抛出)时自动减轻一些 这些问题 - 通常被称为"尝试/最终"或类似的。 具有讽刺意味的是,像这样的功能"终于"条款可以 通过goto实现到子程序的单个返回点。一个 替代解决方案是使用正常的堆栈展开(变量 deallocation)在函数出口处取消分配资源,例如via 局部变量上的析构函数,或Python等类似机制 "与"言。
但即便如此,如果你想要实现Single entry和Single退出功能,那么最好的方法就是先将无效案例放在首位,或者根据需要简单地退出或引发异常,在那里放一个空行,然后添加"真实"方法的主体。