2011-09-05 117 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){ 
    //. . . 
} 

更容易捕捉到錯誤

相關問題