使用 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 关键字的目的是啥的主要内容,如果未能解决你的问题,请参考以下文章

这个场景中默认关键字的目的是啥[重复]

关键字“继续”和“产量”在 Python 中的作用是啥?

这个“if”分支中的“out”关键字的目的是啥(用于 WebMatrix 的 OAuth“Starter Site”模板)? [复制]

python的关键字都有哪些,都是啥意思?

基本语法之流程控制之关键字:break和continue

在 C++ 中使用 continue 关键字的另一种方法