Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Refactoring 如何在一个函数中只保留一个return语句?_Refactoring - Fatal编程技术网

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

Refactoring 如何在一个函数中只保留一个return语句?,refactoring,Refactoring,尽管在这里进行了讨论,但是否有一些简单的技巧或方法可以只保留一个返回语句?或者如何将多个返回语句重构为一个返回语句?首先,我们不清楚为什么要这样做,因为在线程中已经提到,由于某些原因,此功能是在现代语言中添加的,以允许用户获得更多功能 这本书说了很多: 有些人确保每个函数都有一个入口和一个出口 (SESE)。这些人认为使用return语句违反了 结构化编程:它是函数的非结构化退出, 导致多个出口点,而不是单个出口点 结构化编程所需。因此有人认为[5] 应该避免使用显式return语句,除非在 子

尽管在这里进行了讨论,但是否有一些简单的技巧或方法可以只保留一个返回语句?或者如何将多个返回语句重构为一个返回语句?

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

这本书说了很多:

有些人确保每个函数都有一个入口和一个出口 (SESE)。这些人认为使用return语句违反了 结构化编程:它是函数的非结构化退出, 导致多个出口点,而不是单个出口点 结构化编程所需。因此有人认为[5] 应该避免使用显式return语句,除非在 子例程的文本结尾,考虑到 “提前返回”,它可能会遇到与 为GOTO语句而出现。相反,可以认为使用 当备选方案更多时,返回语句是值得的 复杂的代码,如更深的嵌套,会损害可读性

还有人说一个或多个“保护条款”——有条件的 函数开头附近的“早期退出”返回语句-- 通常使函数比其他函数更易于阅读。[6][7][8][9]

早期退出中最常见的问题是清理或最终退出 不执行语句–例如,不执行分配的内存 未分配或打开的文件未关闭,导致泄漏。这些必须 在每个易脆且容易导致损坏的返回现场进行 漏洞。例如,在以后的开发中,可以使用return语句 被开发人员忽略,并且应该在 子例程(例如跟踪语句)的结尾可能不正确 在所有情况下均执行。没有返回语句的语言,例如 标准Pascal没有这个问题。一些语言,如C++ 和Python,使用允许执行操作的概念 在返回(或异常抛出)时自动执行,这减轻了一些 这些问题——通常被称为“尝试/最终”或类似问题。 具有讽刺意味的是,像这些“finally”子句这样的功能可以 通过转到子例程的单个返回点来实现。一 另一种解决方案是使用正常的堆栈展开(变量 在函数退出时取消分配)以取消分配资源,例如通过 局部变量上的析构函数,或类似的机制,如Python的 “with”语句

但是,即使这样,如果您想要实现单输入单输出功能,那么最好的方法是首先消除无效案例,或者简单地退出,或者根据需要引发异常,在其中放一个空行,然后添加方法的“真实”主体

同时检查