继续认为有害吗?
开发人员是否应该避免在Cor中继续使用其他语言的同等语言来强制执行下一个循环迭代?支持或者反对论点是否会与有关Goto的论点重叠?
解决方案
回答
我认为continue不会像goto那样困难,因为continue绝不会将执行移出它所在的代码块。
回答
我认为应该更多地使用continue!
我经常遇到如下代码:
for (...) { if (!cond1) { if (!cond2) { ... highly indented lines ... } } }
代替
for (...) { if (cond1 || cond2) { continue; } ... }
使用它可以使代码更具可读性!
回答
"继续"是否比"中断"更具危害性?
如果有的话,在我遇到/使用它的大多数情况下,我发现它使代码更清晰,更像意大利面条。
回答
我们可以在继续或者不继续的情况下编写好的代码,并且可以在继续或者不进行的情况下编写错误的代码。
关于goto的参数可能有一些重叠,但是就我而言,继续使用的用法等同于在方法体中的任何位置使用break语句(在循环中)或者return语句(如果正确使用的话)可以简化代码(包含错误的可能性较小,更易于维护)。
回答
在大多数语言中,Continue是一个非常有用的功能,因为它允许在某些情况下跳过代码块。
一种替代方法是在if语句中使用布尔变量,但是每次使用后都需要将其重置。
回答
继续对我来说是错的。休息会让我们离开那里,但继续似乎只是意大利面条。
另一方面,我们可以模拟带有break的继续(至少在Java中)。
for (String str : strs) contLp: { ... continue contLp; ... }
在某些情况下,继续操作可能会很有用,但对我来说仍然很肮脏。
for (char c : cs) { final int i; if ('0' <= c && c <= '9') { i = c - '0'; } else if ('a' <= c && c <= 'z') { i = c - 'a' + 10; } else { continue; } ... use i ... }
回答
goto可以用作继续,但不能相反。
我们可以在任何地方"转到",从而任意中断流量控制。
因此继续下去,没有危害那么大。
回答
如果继续导致可读性问题,则可能还有其他问题。例如,for循环内有大量代码。如果必须编写较大的for循环,我会尽量坚持在for循环顶部附近继续使用。否则,很容易遗漏在for循环中间深处的连续对象。
回答
没有有害的关键字。它们只有有害用途。
Goto本质上是无害的,也不会继续。它们需要小心使用,仅此而已。
回答
我喜欢在循环开始时使用Continue来处理简单的if条件。
对我来说,由于没有多余的嵌套,它使代码更具可读性,并且我们可以看到我已经明确处理了这些情况。
这与我使用goto的原因相同吗?可能。我有时会使用它们来提高可读性并停止代码的嵌套,但是通常我会更多地使用它们来进行清理/错误处理。
回答
其他人对此有所暗示...但是继续和中断是由编译器强制执行的,并具有自己的关联规则。尽管在某些情况下最终效果可能几乎相同,但Goto没有这种限制。
我不认为继续或者中断本身是有害的,尽管我敢肯定,任何一种使用都可能使任何理性的程序员感到困惑的方式都不能很好地使用。
回答
我认为反对continue的底线在于,它很难证明代码正确无误。这是从数学意义上证明的。但这对我们可能并不重要,因为没有人拥有"证明"非常复杂的计算机程序的资源。
输入静态分析工具。我们可能会使事情变得更艰难...
和goto一样,出于相同的原因,这听起来像是一场噩梦,但在代码中的任何随机位置。
回答
我会说是的。对我来说,这只是打破了流畅编写代码的"流程"。
另一个论点也可能是,如果我们坚持大多数现代语言支持的基本关键字,那么程序流程(如果不是逻辑或者代码)可以移植到任何其他语言。使用不受支持的关键字(例如,continue或者goto)会破坏这一点。
实际上,这更多是个人喜好,但是在编写新代码时,我从来没有使用过它,也没有真正将其视为一种选择。 (与goto相同。)
回答
如果我们要遍历任何类型的结果集,并对这些结果执行操作(例如,在每个结果中),并且如果某个特定结果引起了问题,则它对于捕获预期的错误(通过try-catch)非常有用,记录它,并通过继续进行到下一个结果。对于在零时执行作业的无人值守服务,继续(imo)特别有用,并且一个异常不应影响其他x个记录。
回答
我会说:"取决于"。
如果循环代码比较小(在不滚动的情况下可以看到整个循环代码),通常可以使用继续。
但是,如果循环体很大(例如,由于开关较大),并且有一些后续代码(例如,在开关下方),则可以通过添加继续并有时跳过该代码来轻松引入错误。我在字节码解释器的心脏中遇到了这个问题,由于某些情况下分支继续执行,因此有时未执行某些检测代码。
这可能是一个人为构造的情况,但是我通常尝试避免继续并使用一个if(但嵌套不要像Rob的示例代码中那样深)。
回答
就此程序员而言,嵌套if / else认为是有害的。
回答
- 在循环开始时使用continue避免不必要元素上的迭代是无害的,并且可能非常有用,但是在嵌套的ifs和else的中间使用它可以将循环代码变成复杂的迷宫,以进行理解和验证。
- 我认为避免使用也是语义误解的结果。从未在代码上看到/写入" continue"关键字的人,看到带有continue的代码时,可以将其解释为"自然流程的延续"。例如,如果不让我们继续下一步,我想更多的人会喜欢这种有价值的光标功能。