代码中间的条件和循环返回是正确的



有时我指出你不能在条件或循环的中间放一个返回,因为它会破坏这个过程。但是,现在已经向我表明,如果你能做到,那就更好了。我很困惑。通常会发生在函数中

你能退货吗?不是吗?为什么?还是没有任何区别?

例:

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#这样的语言会为你做动态存储,所以这不是一个真正的问题。此外,如果您在函数中间多次退出(特别是如果它很长),则可能很难跟踪导致函数返回的原因。

但是,选择仅在函数底部退出可能会产生自己的问题,因为有时可能需要通过设置和检查标志来跟踪更多状态。

至于你最初的问题,它当然不会破坏现代编程语言中的任何内容;这一切都取决于你。按照您认为更容易遵循的方式。

最新更新