java外循环控制_关于java:返回for循环或外循环

今天,有人在我看来使用Java中的return关键字。 我写了一个简单的for循环来验证某些东西是否在数组中。 假设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循环不是一个好习惯。 有人可以给我一个解释吗?

这个人究竟做了什么作为第一次不正常的原因? 与GC混合?

如果GC发生故障,那就是JVM的问题,而不是你的程序...你的代码完全有效。

"这会导致垃圾收集失灵":你能详细说明吗?

有些人在for循环内反对return s。 其他人反对它,然后在被问到为什么时弥补原因......

这只是一场宗教战争。

Now someone told me that this is not very good programming because I use the return statement inside a loop and this would cause garbage collection to malfunction.

这是不正确的,并建议你应该对这个人的其他建议给予一定程度的怀疑。

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

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

单个return语句是我以前工作的代码约定的一部分。我发现它会导致很多嵌套,并且更难以阅读代码。

@brain:的确如此。这通常是人们接受一个想法的结果,而不理解为什么在某种情况下这是一个好主意。

在存在异常的情况下,单个退出是不可行的,因为几乎任何非平凡的代码都可以引发一个。最好使用此处的语言流,而不是强制代码根据某些可能在不同环境/语言中有意义的规则来执行操作。

@JonSkeet,看看你做了什么,有人正在使用这个答案试图解决停机问题。

Now someone told me that this is not very good programming because I

use the return statement inside a loop and this would cause garbage

collection to malfunction.

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

就个人而言,我会写:

Boolean retVal = false;

for(int i=0; i

if(array[i]==valueToFind) {

retVal = true;

break; //Break immediately helps if you are looking through a big array

}

}

return retVal;

咩;编写最易读的代码通常会更好,无论对返回语句的数量是多少。例如,如果你有一堆保护条款,每个(IMO)应该在失败时立即返回。

作为旁注,此方法中没有GC,因为此处没有对象分配。

绝对同意戴夫 - 我不明白为什么"方法将退出的地方"本身就具有重要意义。重要的是你能够轻松地遵循该方法的逻辑。

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

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

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

boolean flag = false;

for(int i=0; i

if(array[i] == valueToFind) {

flag = true;

break;

}

}

return flag;

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

引用C2维基:

The original significance of having a single entry and single exit for a function is that it was part of the original definition of StructuredProgramming as opposed to undisciplined goto SpaghettiCode, and allowed a clean mathematical analysis on that basis.

Now that structured programming has long since won the day, no one particularly cares about that anymore, and the rest of the page is largely about best practices and aesthetics and such, not about mathematical analysis of structured programming constructs.

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

我在Uni的一位讲师告诉我们,不希望在任何循环中使用continue,return语句 - for或while。这样做的原因是,在检查代码时,不会立即清楚是否将执行循环的全长或return或continue是否生效。

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值