我认为应更多地使用continue!
我经常遇到以下类似代码:
for (...)
{
if (!cond1)
{
if (!cond2)
{
... highly indented lines ...
}
}
}
取代
for (...)
{
if (cond1 || cond2)
{
continue;
}
...
}
使用它可以使代码更易读!
next if cond1 || cond2;
。 - Brad Gilbertif (!cond1 && !cond2) { 执行代码 }
而不是 if (cond1 || cond2) continue
? - Dennis在IT技术中,continue
和break
相比,是否更有害?
如果说有区别的话,在我遇到或使用它的大多数情况下,continue
让代码更清晰,不会像绕口令一样难以理解。
你可以使用或不使用 continue 编写优秀的代码,也可以使用或不使用 continue 编写糟糕的代码。
关于 goto 的争论可能与此有一些重叠,但就我而言,正确使用 continue 相当于在循环中使用 break 语句或在方法体中从任何位置使用 return 语句——如果正确使用,它可以简化代码(更少的 bug,更易于维护)。
没有有害的关键词,只有对它们有害的使用。
goto本身并不有害,continue也是如此。它们需要谨慎使用,仅此而已。
如果使用 continue 语句影响了代码的可读性,那么很可能你还有其他问题。比如,在 for 循环中有大量的代码。如果必须编写大型的 for 循环,建议在 for 循环的顶部附近使用 continue 语句。否则,深埋在 for 循环中的 continue 语句很容易被忽略。
我喜欢在循环开始处使用continue处理简单的if条件。
对我来说,这使得代码更易读,因为没有额外的嵌套,你可以看到我已经明确处理了这些情况。
这是否与我使用goto的原因相同?也许。有时我会为了可读性和停止代码嵌套而使用它们,但我通常更多地用于清理/错误处理。
在循环开始时使用continue来避免迭代不必要的元素是没有害处的,而且非常有用,但是在嵌套的if和else中间使用它会使循环代码变得复杂,难以理解和验证。
我认为人们对其使用的回避也是语义上的误解。那些从未看到/写过'continue'关键字的人,在看到带有continue的代码时可能会将其解释为“自然流程的延续”。如果我们用next代替continue,我认为更多的人会欣赏这个有价值的游标特性。
我认为continue永远不会像goto那样困难,因为continue从不将执行移出它所在的代码块。