如何在函数中只保留一个return语句?

时间:2014-06-25 05:26:10

标签: refactoring

尽管在这里讨论Should a function have only one return statement?,是否有一些简单的提示或方法只保留一个return语句?或者如何将多个return语句重构为只有一个return语句?

1 个答案:

答案 0 :(得分:1)

首先,不清楚为什么要这样做,因为在线程中已经提到过,由于某些原因,现代语言中添加了此功能,并允许用户获得更多功能。

wiki说了很多:

  

有些人确保每个功能都有一个条目,单个退出   (SESE)。这些人认为使用退货声明是违反的   结构化编程:它是一个非结构化的函数退出,   导致多个退出点,而不是单个退出点   结构化编程所需。因此有人认为[5]   一个人应该避免使用显式return语句,除了at   一个子程序的文本结束,考虑到它何时习惯   "早退,#34;它可能遇到同样的问题   出现在GOTO声明中。相反,可以认为使用   当替代方案更多时,返回声明是值得的   复杂的代码,例如更深的嵌套,损害了可读性。

     

其他人说一个或多个"保护条款" - 有条件的   "提前退出"在函数开头附近返回语句 -   通常使函数比替代函数更容易阅读。[6] [7] [8] [9]

     

提前退出的最常见问题是清理或最终解决   语句不会被执行 - 例如,分配的内存不是   未分配或打开的文件未关闭,导致泄漏。这些必须   在每个返回站点完成,这是脆弱的,很容易导致   错误。例如,在以后的开发中,可以使用return语句   被开发人员忽视,以及应该执行的操作   子程序(例如,跟踪语句)的结尾可能不是   在所有情况下都执行。没有返回语句的语言,例如   标准Pascal没有这个问题。有些语言,比如C ++   和Python,使用允许执行操作的概念   返回(或异常抛出)时自动减轻一些   这些问题 - 通常被称为"尝试/最终"或类似的。   具有讽刺意味的是,像这样的功能"终于"条款可以   通过goto实现到子程序的单个返回点。一个   替代解决方案是使用正常的堆栈展开(变量   deallocation)在函数出口处取消分配资源,例如via   局部变量上的析构函数,或Python等类似机制   "与"言。

但即便如此,如果你想要实现Single entry和Single退出功能,那么最好的方法就是先将无效案例放在首位,或者根据需要简单地退出或引发异常,在那里放一个空行,然后添加"真实"方法的主体。

同时检查 Where did the notion of “one return only” come from?