返回for循环或外循环

今天有人告诉我在Java中使用return关键字。 我编写了一个简单的for循环来validation数组中的某些东西。 假设array是一个长度为n的数组,这是我的代码:

 for(int i=0; i<array.length; ++i){ if(array[i]==valueToFind) return true; } return false; 

现在有人告诉我这不是很好的编程,因为我在循环中使用return语句,这会导致垃圾收集出现故障。 因此,更好的代码将是:

 int i = 0; while(i<array.length && array[i] != valueToFind) ++i; return i != array.length; 

问题是我无法正确地阐述为什么第一个for循环不是一个好习惯。 有人能给我一笔费用吗?

现在有人告诉我这不是很好的编程,因为我在循环中使用return语句,这会导致垃圾收集出现故障。

这是不正确的,并建议你应该对这个人提出一些怀疑态度的其他建议。

“只有一个返回语句”(或者更一般地说,只有一个出口点)的口号对于您必须自己管理所有资源的语言非常重要 – 这样您就可以确保将所有清理代码放在一个地方。

它在Java中没那么有用:只要你知道你应该返回(以及返回值应该是什么),只需返回即可。 这样,它更容易阅读 – 您不必接受任何其他方法来计算将要发生的其他事情(除了finally块)。

现在有人告诉我这不是很好的编程,因为我在循环中使用return语句,这会导致垃圾收集出现故障。

那是一堆垃圾。 方法中的所有内容都将被清除,除非在类或其他地方有其他引用(封装很重要的原因)。 根据经验,通常最好只使用一个return语句,因为更容易确定方法将退出的位置。

就个人而言,我会写:

 Boolean retVal = false; for(int i=0; i 

所有语言都有方法论主张在任何函数中使用单个return语句。 然而,它可能在某些代码中是不可能的,有些人确实在努力,但是,它可能最终使您的代码更复杂(如在更多代码行中),但另一方面,更容易遵循(如在逻辑中)流)。

这不会以任何方式搞乱垃圾收集!

更好的方法是设置一个布尔值,如果你想听他的话。

 boolean flag = false; for(int i=0; i 

有些人认为方法应该有一个退出点(例如,只有一个return )。 就个人而言,我认为坚持这一规则会产生难以阅读的代码。 在你的例子中,一旦你找到你想要的东西,立即返回,它是清楚的,它是有效的。

引用C2维基:

对于函数具有单个入口和单个出口的最初意义在于,它是StructuredProgramming的原始定义的一部分,而不是无纪律的goto SpaghettiCode,并且允许在此基础上进行清晰的数学分析。

现在,结构化编程早已赢得了胜利,没有人特别关注这一点,页面的其余部分主要是关于最佳实践和美学等,而不是结构化编程结构的数学分析。

在这两种情况下,代码都是有效的(即,将编译和执行)。

我在Uni的一位讲师告诉我们,在任何循环中都不能continuereturn语句 – for or while 。 这样做的原因是,在检查代码时,不能立即清楚循环的全长是执行还是returncontinue生效。

看看为什么在循环中继续是一个坏主意? 举个例子。

要记住的关键点是,对于像这样的简单场景,它不会(IMO)重要,但是当你有复杂的逻辑确定返回值时,如果你有一个return语句而不是代码,那么代码通常会更具可读性。一些。

关于垃圾收集 – 我不知道为什么这会是一个问题。