我最近在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
只是我,还是数字线方法看起来不那么清晰?您对此做法有何看法?
他提到在比较左侧放置常数与数字线方法相矛盾,这也很奇怪,但似乎数字线方法导致将常数放在左侧。
答案 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]
发出警告总之,如果您修复了所有编译器警告,则可以使用任何一种编码方式。