If statement &引用;“数字行”;比较方式

If statement &引用;“数字行”;比较方式,if-statement,code-formatting,If Statement,Code Formatting,我最近在《代码完成》中读到,处理涉及数字的表达式的推荐方法是将它们像数字行一样排序 本书有两个例子: if ( (MIN_ELEMENTS <= i) && (i <= MAX_ELEMENTS) ) if ( (i < MIN_ELEMENTS) || (MAX_ELEMENTS < i ) ) if((MIN_ELEMENTS我认为这不是一种天生优越的方法。优点在于在整个代码中使用相同的表达式,使代码在习惯后阅读速度更快。我认为应该按照您期望的阅读

我最近在《代码完成》中读到,处理涉及数字的表达式的推荐方法是将它们像数字行一样排序

本书有两个例子:

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

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

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

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

因此,我将这样做:

if (i > MIN_ELEMENTS &&
    i <= MAX_ELEMENTS)
if(i>MIN_)元素&&

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

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


如果你总是以“数字行”的方式排列比较,你甚至不需要
=
比较运算符。它们的存在有很好的理由。

史蒂夫·麦康奈尔的工作非常出色,但有一点我不同意他的观点。这可能是你的一个原因


如果你觉得这会让你的代码变得不那么清晰,那么不要仅仅因为Steve McConnell认为这是一种方法就这么做。

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

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

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

if ( CONST == i )   //[1]
以与以下相同的方式:

if ( i == CONST)    //[2]
您永远不会成为以下错误的牺牲品:

if ( i = CONST)     //[3]
然而,应该注意的是,当今大多数现代编译器都对构造给出了警告[3]


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

我认为问题更多的是关于比较,而不是赋值。很抱歉第一次没有正确阅读问题。我完全同意您的看法。我只是想确保这不只是我自己,而且对其他人来说更清楚。是的,即使使用多部分条件,我认为首先处理“条件元素”比处理常量更有意义,因为(一些?)人类就是这样想的。对,我在任何情况下都不会使用将常量放在第一位的方式,因为如果我这样做,编译器会警告我(当然,情况并不总是这样,但今天确实如此)。我发现使用比较左侧的变量读起来更流畅。而且,对于不允许在表达式中赋值的正常语言,将常量放在左侧的原始原因甚至不适用。
if ( i == CONST)    //[2]
if ( i = CONST)     //[3]