“数字线”比较风格

时间:2009-11-18 01:39:19

标签: if-statement code-formatting

我最近在Code Complete中读到,处理涉及数字的表达式的推荐方法是将它们命名为数字行。

这本书有两个例子:

if ( (MIN_ELEMENTS <= i) && (i <= MAX_ELEMENTS) )

if ( (i < MIN_ELEMENTS) || (MAX_ELEMENTS < i ) )

第一个例子显示i介于min和max元素之间,第二个例子是i超出了元素之间的范围。

我一直在尝试采用它,我不确定这是否就像我想的那样,但我认为它不会使代码更清晰。

示例:

 if (m_Health > BOSS_HALF_HEALTH) // The way it was

 if (BOSS_HALF_HEALTH <= m_Health) // The "number line" method

只是我,还是数字线方法看起来不那么清晰?您对此做法有何看法?

他提到在比较左侧放置常数与数字线方法相矛盾,这也很奇怪,但似乎数字线方法导致将常数放在左侧。

5 个答案:

答案 0 :(得分:1)

我认为它应该以您期望的方式编写。

因此我会这样做:

if (i > MIN_ELEMENTS &&
    i <= MAX_ELEMENTS)

而不是:

if ( (MIN_ELEMENTS <= i) && (i <= MAX_ELEMENTS) )

因为我读过类似英语的C,比如

如果我小于min且大于max

而不是

如果min小于is且小于max

因为我关心我,而不是关心。

答案 1 :(得分:1)

我认为最初的动机来自于在同一逻辑表达式中进行多次比较。引用的示例都是在范围的较低上限之间进行比较。这种排序方法在这些情况下可能具有价值。

但是,如果您正在测试条件,例如m_Health > BOSS_HALF_HEALTH,我认为这不一定适用。在这种情况下,你所做的比较是某事物(变量)是否大于其他东西。这是完全合乎逻辑的,不需要以任何特定方式进行排序。

如果总是以“数字线”的方式对您进行比较,那么您甚至不需要>>=比较运算符。它们存在的原因很充分。

答案 2 :(得分:0)

我认为这不是一种天生优越的方法。优点在于在整个代码中使用相同的表达式,使您在习惯时更快地阅读代码。

答案 3 :(得分:0)

史蒂夫麦康奈尔的作品非常出色,但有些事我不赞同他。这可能是你的一件事。

如果你认为它使你的代码不那么清晰,那就不要仅仅因为史蒂夫麦康奈尔认为这是要走的路。

答案 4 :(得分:0)

我想最初的目的只是养成一种习惯。

语言只是一种熟悉的单词排列。一旦成为习惯, 你习惯了它。

如果你可以训练你的大脑阅读:

if ( CONST == i )   //[1]

与以下相同:

if ( i == CONST)    //[2]

你永远不会成为以下错误的牺牲品:

if ( i = CONST)     //[3]

但是,应该注意的是,现在大多数现代编译器都会对构造[3]

发出警告

总之,如果您修复了所有编译器警告,则可以使用任何一种编码方式。