0

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

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

例子:

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

4 回答 4

2

您的两个示例在功能上基本相同,并且都可以使用。事实上,优化编译器可能很容易将您的第二个示例变成您的第一个示例。

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

于 2013-11-09T02:02:03.620 回答
1

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

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

综上所述,我已经看到了很多写得很漂亮的代码,在循环中间有返回。

于 2013-11-09T02:05:47.293 回答
1

最好在底部有一个单一的回报。这样,您只有一个入口点和一个出口点。当您不必担心代码会从哪里退出时,调试代码会容易得多。对于非常短的方法,这没什么大不了的,但是对于持续几百行的长方法,它要干净得多。

于 2013-11-09T02:00:34.760 回答
0

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

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

至于您最初的问题,它当然不会破坏现代编程语言中的任何内容。全取决于你。选择你觉得更容易遵循的方式。

于 2013-11-09T02:07:21.687 回答