提问人:leoledmag 提问时间:11/9/2013 最后编辑:leoledmag 更新时间:11/9/2013 访问量:339
代码中间的条件和循环返回是正确的吗?[复制]
Conditional and Loop return in the middle of the code is that correct? [duplicate]
问:
有时我指出,你不能把一个返回放在条件或循环的中间,因为它会破坏这个过程。但是,现在已经向我表明,如果你能做到,那就更好了。我很困惑。通常发生在函数中
你能退货吗?不是吗?为什么?还是没有任何区别?
例:
if (i == 0)
{
//other code
return true;
}
else
{
//other code
return false;
}
或
if (i == 0)
{
//other code
b= true;
}
else
{
//other code
b= false;
}
return b;
答:
最好在底部有一个单一的回报。这样,您只有一个入口点和一个出口点。当您不必担心代码将退出到何处时,调试代码要容易得多。对于非常短的方法来说,这没什么大不了的,但对于持续几百行的长方法来说,它要干净得多。
评论
您的两个示例在功能上基本相同,并且任何一个都可以工作。事实上,优化编译器可以很容易地将第二个示例转换为第一个示例。
大多数程序员可能更喜欢第一种,因为意图更明确。
评论
我看不出在循环中返回有任何实际意义。如果你听到有人说你不应该,那么它一定是基于代码的可读性。如果函数有多个退出点,则可能会使某些代码变得丑陋。此外,大多数情况下,您必须在退出例程之前进行一些清理。因此,通常程序员倾向于将清理例程保持在一个地方,并始终通过该路径退出。如果您有多个出口点,则必须在所有这些位置添加清理例程,这会导致代码重复并再次破坏代码的可读性。我看到返回的代码遍布各处,最终无法正确进行清理并导致内存泄漏。
更大的问题是,大多数时候,你写的代码现在存在了很长时间,维护者不断变化,在某些时候人们并不理解所有代码行的全部意图。这将加剧所有这些混乱。
综上所述,我见过很多写得非常漂亮的代码,在循环中间有返回。
这是一种风格的选择,而不是规则或性能问题。第二个代码示例遵循“单次进入,单次退出”方法,其中函数中的代码仅从顶部进入,仅从底部退出。这背后的想法是,这更“安全”,更容易遵循代码流。当您手动设置动态存储时,安全性就会发挥作用:通过单点返回,您可以确保释放所有内存。当然,像 java 和 C# 这样的语言会为你做动态存储,所以这并不是一个真正的问题。此外,如果在函数中途多次退出(特别是如果它很长),可能很难跟踪导致函数返回的原因。
但是,选择仅在函数底部退出可能会产生其自身的问题,因为有时可能需要通过设置和检查标志来跟踪更多状态。
至于你最初的问题,它当然不会破坏现代编程语言中的任何内容;这完全取决于你。选择您认为更容易遵循的方式。
评论