2011-09-05 147 views
9

我已经看到,在一些循环和增量。而不是做我++,他们做我+ = 1.为什么这是?为什么人们使用i = i + 1而不是i ++?

+0

为什么在标题不同的问题身体中的问题?你打算问哪一个? –

+0

我使用'i + = 1',除了for循环的第三个位置,在这种情况下我使用'i ++'。 – 2011-09-06 00:23:50

回答

9

并非所有的语言都有++运算符(python,一个)......可能这些人来自其中一种语言的背景。也有人认为i++不是很清楚,尤其是因为一些语言对待i++++i的方式不同。

+7

我所知道的每种语言都以不同的方式对待'i ++'和'++ i':表达式的值。换句话说,'x = i ++;'比'x = ++ i'更少地将一个值赋给'x'。这是你想到的吗?我很好奇你对“一些”这个词的用法;你知道有前缀和后缀增量运算符的语言吗,不要区分这个区别吗? –

+1

@Ted Hopp Perl将根据前或后增量返回*值*或*参考*。这可能会导致令人费解的行为。在基本形式中,这不是问题。这在'foo($ x,++ $ x)'的情况下非常令人费解,但是(评估仍然是从左到右)。另外,C/C++有很多UB可变修改(++/- )和两个序列点之间的访问。 – 2011-09-06 00:27:03

+1

在IE浏览器的IE10(也可能<10),我的速度比* +慢了15%* *。因此,我总是喜欢使用i + = 1,只是因为它更快,而且在语义上它几乎是一样的权利。 – Yeti

14

个人喜好和风格。

3

防止过度狡猾。至少这就是克罗克福德所说的。

+2

但是,狡猾的代码会很狡猾,没有“++”,干净的代码会变成干净的代码,带有“++”。 – 2011-09-06 00:24:58

2

i = i + 1更容易解码英文。 i++虽然当初学者阅读代码时,完全正确的翻译并不好。程序员可能试图让他们的代码更易于被初学者阅读,或者可能只是不想过度关注语法。没有理由使用一个在另一个。

0

有些人发现i = i + 1i += 1i++更具描述性。这只是编码风格和可读性的问题。在大多数当前语言中,不同方式之间完全没有性能差异。

++--操作符有一些可读性问题,但主要是当它们与其他操作符一起使用时,它们自己使用时不是真正的问题。例如,像++x+-++y+-z++这样的表达式是完全有效的,但很难看到它实际上做了什么。由于操作员在某些情况下会导致可读性问题,因此有些人认为应该始终避免这些问题。

+0

然而,这是一个极端。虽然我更喜欢'+ ='到'++',但好的代码是好的代码,坏的代码是坏的代码:'++ x + - ++ y + -z ++'不是好的代码,'++'不在。例如,想象一下,如果使用“i ++”(甚至是“++ i”)的“规则”是“仅在语句上下文中”。这与限制使用“x = i = i + 1”或其他这样的怪物的“规则”没有什么不同。 – 2011-09-06 00:33:06

+0

@pst:当然这是不好的代码,这个例子的要点是要证明操作符可以用来编写不可读的代码。 – Guffa

3

一般的原因是,有一些不同的表现

var i = 0; 
1 == ++i // true 

var i = 0; 
1 == i++; // false 

++i翻译为“增量我,然后评估”,而i++转化为增量的两个不同版本“评估我,然后增量

当您将这些表达式编写为i = i + 1;时,很清楚程序员的意图是什么,并且更容易在代码中找到错误。这是同样的道理的人写“尤达条款”像

if(6 == x){ 
    //. . . 
} 

,因为如果你不小心做

if(6 = x){ 
    //. . . 
} 

更容易捕捉到错误

相关问题