1

我最近在 Code Complete 中读到,处理涉及数字的表达式的推荐方法是像数字轴一样对它们进行排序。

本书有2个例子:

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

是我一个人,还是数轴法似乎不太清楚?你对这种做法有什么看法?

奇怪的是,他提到将常数放在比较的左侧与数轴方法相矛盾,但这里似乎数轴方法导致将常数放在左侧。

4

5 回答 5

1

我认为它应该按照您希望阅读的方式编写。

因此我会这样做:

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

代替:

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

因为我读C和英语一样,比如

如果 i 小于 min 且大于 max

代替

如果 min 小于 is 并且 is 小于 max

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

于 2009-11-18T01:43:06.467 回答
1

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

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

如果您总是以“数字线”的方式对比较进行排序,那么您甚至都不需要>or>=比较运算符。它们的存在是有充分理由的。

于 2009-11-18T01:48:35.347 回答
0

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

于 2009-11-18T01:41:59.557 回答
0

Steve McConnell 的工作非常出色,但在一些小事上我不同意他的看法。这可能是你的事情之一。

如果你觉得它让你的代码变得不那么清晰,那么不要仅仅因为 Steve McConnell 认为这是要走的路就这样做。

于 2009-11-18T01:49:11.167 回答
0

我想初衷只是为了养成一个习惯。

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

如果你能训练你的大脑阅读:

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

在相同的方式:

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

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

if ( i = CONST)     //[3]

但是,应该注意的是,当今大多数现代编译器都会对构造 [3] 发出警告

总之,如果您要修复所有编译器警告,您可以使用任何一种编码风格。

于 2010-08-07T12:34:41.307 回答