使用 continue 关键字的目的是啥
Posted
技术标签:
【中文标题】使用 continue 关键字的目的是啥【英文标题】:What is the purpose of using the continue keyword使用 continue 关键字的目的是什么 【发布时间】:2015-03-24 09:43:06 【问题描述】:我刚刚找到了一段代码,看起来是这样的;
for(;;)
if (condition)
continue;
DoSomething();
编写这样的代码而不是仅仅做有什么意义;
for(;;)
if (!condition)
DoSomething();
【问题讨论】:
这是一个很好的问题,但实际上取决于代码的其余部分。我会说你在这种情况下是对的,但是课程的马 我们怎么知道?询问编写此内容的开发人员 您是否阅读过continue
声明的文档并了解它是如何工作的?
在那种情况下,两者之间可能没有太大区别。但是,条件可能要复杂得多,明确地说“如果发生这种情况,请移至下一个”也更简洁。
@SonerGönül 是的,我了解它的工作原理。但这不是我的问题
【参考方案1】:
当您添加更多这样的“破坏条件”时,可读性的可能好处变得显而易见:
for(;;)
if (condition1)
continue;
if (condition2)
continue;
if (condition3)
continue;
DoSomething();
这会整齐地检查导致迭代跳过的条件。
将其转换为另一种形式:
for(;;)
if (!condition1 && !condition2 && !condition3)
DoSomething();
可以说,这比上面的可读性略差。一旦在continue
之前实际上有一些活动(例如日志输出),情况就会变得更糟:
for(;;)
if (condition1)
Log("condition1");
else
if (condition2)
Log("condition2");
else
if (condition3)
Log("condition3");
else
DoSomething();
对比continue
:
for(;;)
if (condition1)
Log("condition1");
continue;
if (condition2)
Log("condition2");
continue;
if (condition3)
Log("condition3");
continue;
DoSomething();
【讨论】:
【参考方案2】:这种继续使用通常与以下结构的代码相关联:
for (; exitCondition;)
AlwaysDoDomething();
if (condition)
continue;
SometimesDoSomething();
即。循环中有两个代码块,条件仅控制第二个代码块。人们可能更喜欢
for (; exitCondition;)
AlwaysDoDomething();
if (!condition)
SometimesDoSomething();
但这假设condition
足够简单,否定不会在表达式中丢失(考虑如果condition
实际上是expression1 || expression2 || expression3
,其中子表达式本身是不平凡的)。并且SometimesDoSomething
很短,所以很明显if
控制的块很短。
最清楚的是主观和很大程度上取决于具体情况。
【讨论】:
【参考方案3】:在您的特定情况下 - 根本没有区别,因为条件下的代码块是单个方法调用。
但是,如果在不满足条件的情况下运行的代码不是对DoSomething();
的一次调用,而是一些足够大的代码块——那么在使用@987654322 的语法时,嵌套级别会略低(代码可读性略高) @。
考虑一下:
for(;;)
if (condition)
continue;
DoSomething();
DoSomethingElse();
DoAnything();
....
DoAnythingElse();
和
for(;;)
if (!condition)
DoSomething();
DoSomethingElse();
DoAnything();
....
DoAnythingElse();
第二个示例看起来不太可读,因为嵌套/缩进级别更高。
【讨论】:
以上是关于使用 continue 关键字的目的是啥的主要内容,如果未能解决你的问题,请参考以下文章
这个“if”分支中的“out”关键字的目的是啥(用于 WebMatrix 的 OAuth“Starter Site”模板)? [复制]