为啥我应该使用 continue 而不是空的 if 语句? [关闭]

Posted

技术标签:

【中文标题】为啥我应该使用 continue 而不是空的 if 语句? [关闭]【英文标题】:Why should I use continue as opposed to an empty if statement? [closed]为什么我应该使用 continue 而不是空的 if 语句? [关闭] 【发布时间】:2015-11-21 17:16:21 【问题描述】:

例如: 使用这个块有什么缺点/优点:

for(int i = 0; i < 10; i++)

   if(i < 9)
   else Console.Writeline(i);

相对于这个块:

for(int i = 0; i < 10; i++)

   if(i < 9)
   
   continue;
   
   Console.Writeline(i);

考虑到它们的输出是完全一样的。

【问题讨论】:

两者没有优势。如果为空,你会很难阅读(有时)。你最好使用if(i &gt;= 9) .. 顺便说一句,在您的示例中它只打印 9,因为循环最多为 10。 也许知道编译器对 continue 关键字做了什么的人可以提供一些建议。我不知道,但继续可能会有一些性能劣势/优势。 @Andre 他们没有性能劣势。也没有优势。性能差异将接近 epsilon ;) 只有可读性。由您自己或您的团队决定哪种方法更具可读性 【参考方案1】:

空块很奇怪,所以在这种情况下,你只需反转条件:

for (int i = 0; i < 10; i++)

   if (i >= 9)
       Console.Writeline(i);

但在一般情况下,使用continuebreak 是防止代码缩进太多级别的好方法。有关该主题的一些讨论,请参阅 Programmers SE 上的this question。

【讨论】:

缩进的代码比缩进的程序更有意义【参考方案2】:

我总是这样

// ...
if(!(i < 9))
    Console.Writeline(i);
// ...

防止出现空的 if 语句。

在您的代码中,两者之间几乎没有区别,第一个它没有到达 else 语句,第二个它跳过循环中的其余部分。

【讨论】:

正如 poke 正确所说,这是防止程序缩进太多级别的好方法。 在我看来,负面的If 块的可读性不如正面 是的,但是当我有一个空的 if 语句时,我发现只做一个 not if 语句通常很有用。有时我的大脑不工作,或者我必须在 if 语句中添加更多逻辑才能让它在不做 NOT 的情况下工作 Negative if 可以用returncontinuebreak 替换为正数。 -> if (i &lt; 9) return; 我想这是个人意见,就我个人而言,我不喜欢放置一个“空”的 if 语句(除了返回/继续/中断之外什么都不做的语句)【参考方案3】:

我发现选择其中之一的唯一原因是易读性。我个人使用这两种形式,根据if 之后的块长度选择一种或另一种。例如,如果它只包含几行,我只使用普通的if

for (int i = 0; i < 10; i++)

   if (i >= 9)
       Console.Writeline(i);

(示例取自poke answer)。

但如果工作量很大,我会反转条件并改用continue

for (int i = 0; i < 10; i++)

   if (i < 9) continue;

   Console.Writeline(i);
   Console.Writeline("this");
   Console.Writeline("that");
   Console.Writeline("blablabla");
   Console.Writeline("hello");
   Console.Writeline("world");
   Console.Writeline(i + 1);
   Console.Writeline(i + 2);

这样做可以避免在更大的块上缩进。在单行或很少的行上做通常很容易阅读,但在较长的块上可能会变得更难理解。

【讨论】:

以上是关于为啥我应该使用 continue 而不是空的 if 语句? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Python:为啥 if-else 一行语句在 else 中不能与 continue 一起使用?

空的“期望:”标题是不是意味着啥?

空的“期望:”标题是不是意味着啥?

有人可以解释 if 语句中的 continue 键吗? [复制]

为啥我应该使用 Any 方法而不是 Count? [复制]

为啥使用预处理器#if 语句而不是 if() else?