Conditional and Loop return in the middle of the code is that correct?
有时我已经指出,不能将返回放在条件或循环的中间,因为它会中断进程。不过,现在已经向我表明,如果你能做到,那就更好了。我搞糊涂了。通常发生在函数中
你能退换货吗?不是吗?为什么?或者它没有什么区别吗?
例子:
1 2 3 4 5 6 7 8 9 10 | if (i == 0) { //other code return true; } else { //other code return false; } |
或
1 2 3 4 5 6 7 8 9 10 11 | if (i == 0) { //other code b= true; } else { //other code b= false; } return b; |
您的两个示例在功能上基本上是等效的,并且都可以工作。实际上,一个优化编译器可以很容易地将第二个示例转换为第一个示例。
大多数程序员可能更喜欢第一个,因为目的更明确。
我看不出在循环中间返回的任何实际含义。如果你听到人们说你不应该这样做,那么它必须以代码的可读性为基础。如果函数有多个出口点,可能会使某些代码变得丑陋。而且,大多数情况下,在退出例程之前必须进行一些清理。因此,一般来说,程序员倾向于将清理程序放在一个地方,并且总是通过这条路径退出。如果有多个出口点,那么必须在所有这些地方添加清理例程,这会造成代码重复,并再次破坏代码的可读性。我已经看到返回的代码散布在所有地方,最终未能正确地进行清理并导致内存泄漏。
更大的问题是,大多数情况下,您现在编写的代码会持续很长时间,并且维护者会不断地更改,而且在某些情况下,人们并不理解所有代码行的全部意图。这将增加所有这些混乱。
尽管如此,我已经看到了很多非常漂亮的代码,它们的返回位于循环的中间。
最好是在底部有一个单一的回报。这样,您只有一个入口和一个出口。当您不必担心代码将从何处退出时,调试代码就容易得多。对于非常短的方法来说,这并不是什么大问题,但是对于长的方法,只要几百行就行了,这就更干净了。
这是一种风格选择,而不是规则或性能问题。第二个代码示例遵循"单入口、单出口"方法,其中函数中的代码只从顶部进入,而只从底部退出。这背后的想法是,这是更"安全"和更容易遵循代码流。当您手动设置动态存储时,安全性就会发挥作用:通过单点返回,您可以确保释放所有内存。当然,像Java和C语言这样的语言为你做动态存储,所以这不是一个真正的问题。此外,如果您在函数的中间多次退出(特别是当函数很长时),可能很难跟踪导致函数返回的原因。
但是,选择只在函数的底部退出会产生它自己的问题,因为有时您可能需要通过设置和检查标志来跟踪更多的状态。
至于您最初的问题,它肯定不会破坏现代编程语言的任何东西,这一切都由您决定。按照你觉得更容易理解的方式去做。