首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中使用break退出循环是不是一种糟糕的做法?

在Java中使用break退出循环是不是一种糟糕的做法?
EN

Stack Overflow用户
提问于 2013-08-12 21:23:13
回答 9查看 109.4K关注 0票数 81

我想知道使用break语句退出循环而不是满足循环条件是不是一种“糟糕的做法”?

我对Java和JVM没有足够的洞察力,无法知道循环是如何处理的,所以我想知道这样做是否忽略了一些关键的东西。

这个问题的焦点是:是否存在特定的性能开销?

EN

回答 9

Stack Overflow用户

发布于 2013-08-12 21:55:21

在我看来,当要完成固定数量的迭代时,应该使用For循环,并且它们不会在每次迭代完成之前停止。在另一种情况下,如果您想要提前退出,我更喜欢使用While循环。即使你读了这两个字,它看起来也更符合逻辑。下面是一些例子:

for (int i=0;i<10;i++) {
    System.out.println(i);
}

当我快速阅读这段代码时,我将确定它将打印出10行,然后继续。

for (int i=0;i<10;i++) {
    if (someCondition) break;
    System.out.println(i);
}

这一点我已经不太清楚了。为什么你会先声明你将进行10次迭代,然后在循环中添加一些额外的条件来更快地停止?

我更喜欢以这种方式编写的前一个示例(即使它有点冗长,但这只是多了一行):

int i=0;
while (i<10 && !someCondition) {
    System.out.println(i);
    i++;
}

阅读这段代码的每个人都会立即看到,有一个额外的条件可能会提前终止循环。

当然,在非常小的循环中,您总是可以讨论每个程序员都会注意到break语句。但我可以从我自己的经验中看出,在更大的循环中,这些中断是可以被监督的。(这将我们带到另一个主题,开始将代码拆分成更小的块)

票数 5
EN

Stack Overflow用户

发布于 2013-08-12 21:26:47

在循环中使用break可以是完全合法的,甚至是解决某些问题的唯一方法。

然而,它的坏名声来自于这样一个事实,即新的程序员通常滥用它,导致代码混乱,特别是通过使用break在条件中停止循环,而这些条件本来可以在loop条件语句中编写。

票数 4
EN

Stack Overflow用户

发布于 2013-08-12 21:38:49

这不是一种糟糕的做法,但它会降低代码的可读性。解决这个问题的一个有用的重构方法是将循环移动到一个单独的方法,然后使用return语句而不是break语句,例如这样(从@Chris的答案中提取的示例):

String item;

for(int x = 0; x < 10; x++)
{
    // Linear search.
    if(array[x].equals("Item I am looking for"))
    {
        //you've found the item. Let's stop.
        item = array[x];
        break; 
    }
}

可以(使用extract method)重构为以下内容:

public String searchForItem(String itemIamLookingFor)
{
    for(int x = 0; x < 10; x++)
    {
        if(array[x].equals(itemIamLookingFor))
        {
            return array[x];
        }
    }
}

当从周围的代码中调用它时,可以证明它更具可读性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18188123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档