继续认为有害吗?

Bri*_*ian 22 language-agnostic loops goto continue

开发人员是否应该避免在C#中使用continue或在其他语言中使用其等效来强制循环的下一次迭代?支持或反对的论据是否与关于Goto的论点重叠?

Rob*_*ker 80

我认为应该继续使用更多!

我经常遇到如下代码:

for (...)
{
   if (!cond1)
   {
      if (!cond2)
      {
          ... highly indented lines ...
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

代替

for (...)
{
   if (cond1 || cond2)
   {
      continue;
   }

   ...
}
Run Code Online (Sandbox Code Playgroud)

用它来使代码更具可读性!

  • @Dennis - 重点是将有趣的代码保存在尽可能远离屏幕左侧的"执行代码"块中.我也发现在大多数情况下更容易阅读条件而没有否定. (5认同)
  • 为什么不做`if(!cond1 &&!cond2){execute code}`而不是`if(cond1 || cond2)继续`? (2认同)

dF.*_*dF. 24

continue任何比,更有害说,break

如果有的话,在我遇到/使用它的大多数情况下,我发现它使代码更清晰,更少意大利面条.

  • @Fox:这是造成对象所有权/生命周期混乱的人的错.不是继续或休息. (4认同)

Pat*_*man 12

无论是否继续,您都可以编写好的代码,无论是否继续,您都可以编写错误的代码.

关于goto的参数可能有一些重叠,但就我而言,使用continue相当于使用break语句(在循环中)或从方法体中的任何地方返回语句 - 如果使用正确,它可以简化代码(不太可能包含错误,更容易维护).


Jor*_*oba 8

没有有害的关键字.只有它们的有害用途.

Goto本身并无害处,也不会继续.他们需要谨慎使用,就是这样.


Tor*_*ack 5

如果继续导致可读性问题,那么您可能还有其他问题.例如,for循环中的大量代码.如果你必须编写大的for循环,我会尝试坚持使用继续接近for循环的顶部.否则,很容易错过深埋在for循环中间的继续.


Jac*_*ing 5

我喜欢在循环开始时使用Continue来处理简单的if条件。

对我来说,由于没有多余的嵌套,它使代码更具可读性,并且您可以看到我已明确处理了这些情况。

这与我使用goto的原因相同吗?也许。我有时会使用它们来提高可读性并停止代码的嵌套,但是通常我会更多地使用它们来进行清理/错误处理。