当前位置: 首页 > 后端技术 > PHP

一个函数应该只有一个返回语句吗?

时间:2023-03-29 15:21:25 PHP

此问题及其答案已被锁定,因为该问题偏离主题,但与历史相关。它目前不接受新的答案或互动。了解更多。为什么在函数中只有一个return语句是一种更好的做法,是否有充分的理由?或者只是从函数返回在逻辑上是正确的,这意味着函数中可能有很多返回语句?这可能是一个不寻常的点,但我认为任何认为支持多个return语句的人都不必在仅支持4个硬件断点的微处理器上使用调试器。;-)虽然“箭头代码”问题是完全正确的,但使用多个返回语句时似乎已经消失的一个问题是调试器的情况。您没有一个方便的通用位置来放置断点以确保您将看到退出和返回条件。我强迫自己只使用一个return语句,因为它在某种意义上会产生代码味道。让我解释一下:functionisCorrect($param1,$param2,$param3){$toret=false;如果($param1!=$param2){如果($param1==($param3\*2)){如果($param2==($param3/3)){$toret=true;}else{$error='错误3';}}else{$error='错误2';}}else{$error='错误1';}返回$toret;}(条件很精明。。。)条件越多,函数越大,越难读。所以如果你习惯了代码味道,你就会意识到它并想要重构你的代码。两种可能的解决方案是:多个返回重构为单独的函数多个返回函数isCorrect($param1,$param2,$param3){if($param1==$param2){$error='Error1';返回假;}if($param1!=($param3\*2)){$error='错误2';返回假;}if($param2!=($param3/3)){$error='错误3';返回假;}返回真;}单独的函数functionisEqual($param1,$param2){return$param1==$param2;}functionisDouble($param1,$param2){return$param1==($param2\*2);}functionisThird($param1,$param2){return$param1==($param2/3);}函数isCorrect($param1,$param2,$param3){return!isEqual($param1,$param2)&&isDouble($param1,$param3)&&isThird($param2,$param3);}当然,它更长而且有点乱,但是在以这种方式重构函数的过程中,我们创建了很多可重用的函数,使函数更易于阅读,并使函数的重点在于为什么值是正确的。*我相信多次回报通常是好的(在我用C#编写的代码中)。单返回样式是C保持。但是您可能不是用C编写代码。在所有编程语言中,没有法律只要求方法的一个出口点。有些人坚持这种风格的优越性,有时他们将其宣传为“规则”或“法律”,但这种信念没有任何证据或研究支持。在必须显式释放资源的C代码中,不止一种返回样式可能是一种不好的做法,但像Java、C#、Python或JavaScript等语言具有自动垃圾收集和try..finally块等。try..finally(并在C#中使用代码块),并且参数不适用-在这些语言中,很少需要密集的手动分配资源。在某些情况下,单个项目返回更具可读性,而在其他情况下则不然。查看它是否减少了代码行数,使逻辑更清晰或减少花括号、缩进或临时变量的数量。因此,尽可能多地使用适合您的艺术敏感性的回报,因为这更多的是布局和可读性问题,而不是技术问题。