在 Java 的 `while` 循环中使用 `break` 语句有什么问题?
What are the problems of using `break` statement in a `while` loop in Java?
我参加了 Java 的 session,演讲者说在 while
循环中使用 break
语句是一种不好的做法。他说可以用,但是从"good coding practice"的角度来说不应该用。他无法令人满意地解释为什么会这样。
但是,他还提到在 for
循环的情况下此限制无效。任何人都可以对此有所了解吗?
编辑:我不是在谈论 while(true)。一般在任何时候(条件)。
许多人将 break and continue 视为 goto 或指令,因为它们会中断执行流程并跳转到不同的点。一个好的做法是为每个执行块设置一个入口和出口点。
IMO,在 while 循环中使用 break
还不错。不过我能猜到演讲者为什么这么说。
所以如果我有这样一个 while 循环:
while (condition1) {
if (condition2) {
break;
}
// do other stuff
}
你绝对可以通过这样做来缩短代码:
while(condition1 && !condition2) {
// do other stuff
}
演讲者可能认为 while 循环中的 break
是不必要的,因为您可以将所有条件写在应该写的地方,即括号中。
然而,事实并非如此。如果我有这个 while 循环:
while (condition1) {
// do other stuff
if (condition2) {
break;
}
}
如何更改它以使其不使用 break
?
while (condition1) {
// do other stuff
if (condition2) {
condition1 = false;
}
}
我觉得这不太好。
让我们将其放入一段有意义的代码中。您认为哪个更具可读性:
while(noWallInFront) {
walk();
if (sawFriend) {
sayHi();
break;
}
}
或
while(noWallInFront) {
walk();
if (sawFriend) {
sayHi();
noWallInFront = false;
}
}
显然是第一个,对吧?第二个听起来像是把你的朋友当成一堵墙。
我参加了 Java 的 session,演讲者说在 while
循环中使用 break
语句是一种不好的做法。他说可以用,但是从"good coding practice"的角度来说不应该用。他无法令人满意地解释为什么会这样。
但是,他还提到在 for
循环的情况下此限制无效。任何人都可以对此有所了解吗?
编辑:我不是在谈论 while(true)。一般在任何时候(条件)。
许多人将 break and continue 视为 goto 或指令,因为它们会中断执行流程并跳转到不同的点。一个好的做法是为每个执行块设置一个入口和出口点。
IMO,在 while 循环中使用 break
还不错。不过我能猜到演讲者为什么这么说。
所以如果我有这样一个 while 循环:
while (condition1) {
if (condition2) {
break;
}
// do other stuff
}
你绝对可以通过这样做来缩短代码:
while(condition1 && !condition2) {
// do other stuff
}
演讲者可能认为 while 循环中的 break
是不必要的,因为您可以将所有条件写在应该写的地方,即括号中。
然而,事实并非如此。如果我有这个 while 循环:
while (condition1) {
// do other stuff
if (condition2) {
break;
}
}
如何更改它以使其不使用 break
?
while (condition1) {
// do other stuff
if (condition2) {
condition1 = false;
}
}
我觉得这不太好。
让我们将其放入一段有意义的代码中。您认为哪个更具可读性:
while(noWallInFront) {
walk();
if (sawFriend) {
sayHi();
break;
}
}
或
while(noWallInFront) {
walk();
if (sawFriend) {
sayHi();
noWallInFront = false;
}
}
显然是第一个,对吧?第二个听起来像是把你的朋友当成一堵墙。