为啥我应该使用 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 >= 9) ..
顺便说一句,在您的示例中它只打印 9,因为循环最多为 10。
也许知道编译器对 continue 关键字做了什么的人可以提供一些建议。我不知道,但继续可能会有一些性能劣势/优势。
@Andre 他们没有性能劣势。也没有优势。性能差异将接近 epsilon ;)
只有可读性。由您自己或您的团队决定哪种方法更具可读性
【参考方案1】:
空块很奇怪,所以在这种情况下,你只需反转条件:
for (int i = 0; i < 10; i++)
if (i >= 9)
Console.Writeline(i);
但在一般情况下,使用continue
或break
是防止代码缩进太多级别的好方法。有关该主题的一些讨论,请参阅 Programmers SE 上的this question。
【讨论】:
缩进的代码比缩进的程序更有意义【参考方案2】:我总是这样
// ...
if(!(i < 9))
Console.Writeline(i);
// ...
防止出现空的 if 语句。
在您的代码中,两者之间几乎没有区别,第一个它没有到达 else 语句,第二个它跳过循环中的其余部分。
【讨论】:
正如 poke 正确所说,这是防止程序缩进太多级别的好方法。 在我看来,负面的If
块的可读性不如正面
是的,但是当我有一个空的 if 语句时,我发现只做一个 not if 语句通常很有用。有时我的大脑不工作,或者我必须在 if 语句中添加更多逻辑才能让它在不做 NOT 的情况下工作
Negative if 可以用return
、continue
或break
替换为正数。 -> if (i < 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 一起使用?