【问题标题】:Is it good practice to increment a factorial in a for loop's increment statement rather than the body of the for loop?在 for 循环的增量语句中增加阶乘而不是 for 循环的主体是一种好习惯吗?
【发布时间】:2017-10-21 20:09:06
【问题描述】:

我想知道在for 循环的增量语句而不是for 循环的主体中增加阶乘是否是一种好习惯?

下面显示了在增量语句中乘法递增的阶乘:

for(Count = 1; Count <= 10; Factorial *= Count, Count++);

另一种方法是在 for 循环的主体内增加阶乘:

for(Count = 1; Count <= 10; Count++)
{
    Factorial *= Count;
}

由于for 循环中的第三个参数用于递增,以这种方式递增是好还是坏的做法/代码风格?我相信它对可读性没有任何权衡 + 通过节省一些空间来整理代码,虽然它不会改变程序的结果,但是以这种方式使用 for 循环有什么负面影响吗?

【问题讨论】:

  • “我相信它在可读性方面没有任何折衷”确实如此,而且我敢打赌大多数人不会认为它是一种整洁。
  • 许多人不希望在for 之后看到;,可能会错过它或认为这是一个错误。就我个人而言,我喜欢将循环的控制与所采取的行动分开。
  • 还有第三个版本,我觉得比你的第一个好,但比你的第二个差:for(Count = 1; Count &lt;= 10; Factorial *= Count++);
  • @Steve 对于空的for 循环,我看到的惯例是将分号本身放在下一行,缩进。这很清楚循环体是空的。
  • @TomKarzes 我认为一个空的{ } 会更清楚,但你也可以将正文包含在其中......

标签: c for-loop coding-style factorial readability


【解决方案1】:

不要将循环体移动到循环头中。

将循环组件分离为循环体和循环头,大大提高了可读性。

您的读者将能够通过快速浏览您的第二个代码 sn-p 来判断循环的“有效负载”(即Factorial *= Count)与循环的控制(其他所有内容)。您的第一个代码 sn-p 会让您的读者挠头几秒钟,然后才意识到(1)for 循环的末尾有一个分号,以及(2)循环的有效负载在标题。

编译器可能会在两种情况下生成相同的代码这一事实根本不应该是一个因素。

【讨论】:

  • 关于控制与有效载荷的可靠而简洁的理由,您已经说服我最好将其保留在体内。那,正如@chris2top 所说,操作可能会超过 1 行,因此让正文可用于附加更多代码是有益的。谢谢。
【解决方案2】:

根据我的经验,在 for 循环的主体中执行此操作更为常见,因为大多数操作都超过 1 行。对于这样“简单”的代码,它在可读性上并没有太大的区别。对你来说唯一重要的是保持一致。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 2021-02-13
    • 2012-05-30
    • 2012-04-12
    • 2014-11-11
    相关资源
    最近更新 更多