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

时间:2013-11-09 01:58:13

标签: language-agnostic coding-style

有时我表示你不能在条件或循环中间放回,因为它会破坏过程。但是,现在已经告诉我,如果你能做到,并且更好。我糊涂了。 通常会发生在函数

你能举一个回归吗?是不是?为什么?或者它没有任何区别?

示例:

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;

4 个答案:

答案 0 :(得分:2)

您的两个示例在功能上基本相同,并且都可以使用。实际上,优化编译器可以轻松地将您的第二个示例转换为第一个示例。

大多数程序员可能更喜欢第一个,因为意图更清晰。

答案 1 :(得分:1)

最好在底部有一次回报。这样,您只有一个入口点和一个出口点。当您不必担心它将退出的位置时,调试代码要容易得多。这对于非常短的方法来说并不是什么大问题,但对于那些持续数百行的长方法来说,它更加清晰。

答案 2 :(得分:1)

我没有看到在循环中间返回的任何实际含义。如果你听到有人说你不应该,那么它必须基于代码的可读性。如果你有多个函数退出点,它可能会使一些代码变得丑陋。此外,大多数情况下,您必须在退出例程之前进行一些清理。因此,通常程序员倾向于将清理例程保留在一个地方并始终通过该路径退出。如果你有多个退出点,那么你必须在所有这些地方添加清理例程,这会使代码重复并再次破坏代码的可读性。我已经看到返回的代码遍布各个地方,最终无法正确清理并导致内存泄漏。

更大的问题是,大多数情况下,您现在编写的代码会存在很长时间,并且维护者会不断变化,并且在某些时候人们无法理解所有代码行的整体意图。这将加剧所有这些混乱。

所有这一切,我已经看到很多非常漂亮的代码,在循环中间返回。

答案 3 :(得分:0)

这是风格的选择,而不是规则或性能问题。第二个代码示例遵循“单入口,单出口”方法,其中函数内的代码仅从顶部进入,并且仅从底部退出。这背后的想法是,这更加“安全”,更容易遵循代码流程。手动设置动态存储时,安全性会发挥作用:只需一个返回点,就可以确保释放所有内存。当然,像java和C#这样的语言为你做动态存储,所以这不是一个真正的问题。此外,如果您在函数中间多次退出(特别是如果它很长),则可能很难跟踪导致函数返回的原因。

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

至于你原来的问题,它肯定不会破坏现代编程语言中的任何东西;全取决于你。按照您发现的方式更容易理解。