【发布时间】:2011-06-22 06:55:11
【问题描述】:
Douglas Crockfod 说,通常最好在循环内重构 continue。
为什么 continue 在循环中被认为是坏的?
【问题讨论】:
-
另见Continue in nested while loops。很少有专门针对 C# 的内容,其中提供的许多答案都非常出色。
Douglas Crockfod 说,通常最好在循环内重构 continue。
为什么 continue 在循环中被认为是坏的?
【问题讨论】:
使用continue 意味着您的while 中的条件不充分。
您应该在 while 循环中改用 if,或者将条件添加到 while 循环中。
【讨论】:
continue的(唯一理智的)理由(在大多数情况下,并非总是如此)。跨度>
if 更好”根本无法回答问题。
在循环体内使用 goto、break、continue、throw 或 return 也会产生不希望的效果。这是循环控制和循环主体紧密交织的另一个示例。它像以前一样写1、2和3吗?你确定吗?
int value = 1;
for (;;++value)
{
cout << value << endl;
if (value != 4)
continue;
else
break;
}
您可能会认为建议您不要在循环体内使用 return 语句过于热心了。我真的是这个意思吗?是的,我愿意。返回某些内容的函数应该通过函数末尾的单个 return 语句来执行此操作。以下是一些实际原因:
免责声明:不是我的材料,我已经引用了源代码
【讨论】:
continue 的效果在某种程度上与循环开头的goto 相当。因此,它会让你的代码更难理解——比如gotos。
【讨论】:
if (...) { ... } ... 在某种程度上与块末尾的 goto 相当。严肃地说,盲目地忽视任何与goto 的特殊案例类似的事情与严重滥用不合适的控制结构一样有害(例如,当存在针对手头问题的更高级别的控制结构时使用goto)。
goto 实际上是可以接受的,但仅适用于无条件向下分支。与 continue 不同,它被设计破坏,因为它总是向上分支。 continue 的存在始终表明循环编写不佳,使用它的每个循环都可以以更好的方式重写。