我已經看到,在一些循環和增量。而不是做我++,他們做我+ = 1.爲什麼這是?爲什麼人們使用i = i + 1而不是i ++?
回答
並非所有的語言都有++
運算符(python,一個)......可能這些人來自其中一種語言的背景。也有人認爲i++
不是很清楚,尤其是因爲一些語言對待i++
和++i
的方式不同。
我所知道的每種語言都以不同的方式對待'i ++'和'++ i':表達式的值。換句話說,'x = i ++;'比'x = ++ i'更少地將一個值賦給'x'。這是你想到的嗎?我很好奇你對「一些」這個詞的用法;你知道有前綴和後綴增量運算符的語言嗎,不要區分這個區別嗎? –
@Ted Hopp Perl將根據前或後增量返回*值*或*參考*。這可能會導致令人費解的行爲。在基本形式中,這不是問題。這在'foo($ x,++ $ x)'的情況下非常令人費解,但是(評估仍然是從左到右)。另外,C/C++有很多UB可變修改(++/- )和兩個序列點之間的訪問。 – 2011-09-06 00:27:03
在IE瀏覽器的IE10(也可能<10),我的速度比* +慢了15%* *。因此,我總是喜歡使用i + = 1,只是因爲它更快,而且在語義上它幾乎是一樣的權利。 – Yeti
個人喜好和風格。
防止過度狡猾。至少這就是克羅克福德所說的。
但是,狡猾的代碼會很狡猾,沒有「++」,乾淨的代碼會變成乾淨的代碼,帶有「++」。 – 2011-09-06 00:24:58
i = i + 1
更容易解碼英文。 i++
雖然當初學者閱讀代碼時,完全正確的翻譯並不好。程序員可能試圖讓他們的代碼更易於被初學者閱讀,或者可能只是不想過度關注語法。沒有好理由使用一個在另一個。
有些人發現i = i + 1
或i += 1
比i++
更具描述性。這只是編碼風格和可讀性的問題。在大多數當前語言中,不同方式之間完全沒有性能差異。
++
和--
操作符有一些可讀性問題,但主要是當它們與其他操作符一起使用時,它們自己使用時不是真正的問題。例如,像++x+-++y+-z++
這樣的表達式是完全有效的,但很難看到它實際上做了什麼。由於操作員在某些情況下會導致可讀性問題,因此有些人認爲應該始終避免這些問題。
然而,這是一個極端。雖然我更喜歡'+ ='到'++',但好的代碼是好的代碼,壞的代碼是壞的代碼:'++ x + - ++ y + -z ++'不是好的代碼,'++'不在。例如,想象一下,如果使用「i ++」(甚至是「++ i」)的「規則」是「僅在語句上下文中」。這與限制使用「x = i = i + 1」或其他這樣的怪物的「規則」沒有什麼不同。 – 2011-09-06 00:33:06
@pst:當然這是不好的代碼,這個例子的要點是要證明操作符可以用來編寫不可讀的代碼。 – Guffa
一般的原因是,有一些不同的表現
var i = 0;
1 == ++i // true
和
var i = 0;
1 == i++; // false
++i
翻譯爲「增量我,然後評估」,而i++
轉化爲增量的兩個不同版本「評估我,然後增量」
當您將這些表達式編寫爲i = i + 1;
時,很清楚程序員的意圖是什麼,並且更容易在代碼中找到錯誤。這是同樣的道理的人寫「尤達條款」像
if(6 == x){
//. . .
}
,因爲如果你不小心做
if(6 = x){
//. . .
}
更容易捕捉到錯誤
- 1. 爲什麼i = i + 1比i ++快?
- 2. i = i ++不增加i。爲什麼?
- 3. 爲什麼「for($ i = 1; $ i -le 1000000; $ i ++){}」的執行時間快於「for([int] $ i = 1; $ i -le 1000000; $ i ++){}」在PowerShell中
- 4. C++ STL - 爲什麼要用(W <* I),而不是(W == * I)
- 5. 你爲什麼要用i =(i + 1)&mask來遞增,mask是0b1111?
- 6. Increment ++ i,i ++和i + = 1
- 7. 揹包算法:爲什麼我們使用重量[I-1]而不是重量[I]
- 8. 爲什麼Array(100).map((_,i)=> i + 1)不返回[1,2,...,100]?
- 9. 爲什麼人們在for循環中使用(int i = length(); i> -1; i--)而不是創建新的長度整數?
- 10. 爲什麼「for(; i <= 10; i ++)」工作,但「for(i = 0; i <= 10 ;;)」不?
- 11. 在JavaScript中,「i = + i」是什麼意思?
- 12. i +++ i的價值是什麼?
- 13. 「i ++」如何比「i = i + 1」更高效?
- 14. 爲什麼'int i = i;'法律?
- 15. 爲什麼-i ++和 - (i ++)不同?爲什麼結果如下?
- 16. 就原子性而言,i ++和i = i + 1之間的區別
- 17. 返回項目i + 1而不是項目i在列表
- 18. ++ i和i + 1在javascript中的區別是什麼
- 19. 對於i的複雜性是什麼:對於o = i + 1
- 20. 爲什麼我們需要鍵入 '( 「+ I +」)',而不僅僅是 '(我)'
- 21. 爲什麼對於(int i = 0; i <10; ++ i)和for(int i = 0; i <10; i ++)返回相同?
- 22. 爲什麼「for(i = 100; i <= 0; --i)」永遠循環?
- 23. 是^ i^2 | i> = 1常規?
- 24. 爲什麼printf(「%d%d%d」,++ i,i,i ++)是未定義的行爲?
- 25. 當i = 10時,爲什麼輸出「未定義」(i = 0; i <10; i ++)?
- 26. 爲什麼爲i等於-1
- 27. 爲什麼g ++不使用-I選項?
- 28. 爲什麼v [i] = i ++在C中是未定義的行爲?
- 29. 根據c標準j = i ++ * i ++是未定義的,但j = i ++&i ++是合法的,爲什麼?
- 30. vec(i:1:len)是什麼意思?
爲什麼在標題不同的問題身體中的問題?你打算問哪一個? –
我使用'i + = 1',除了for循環的第三個位置,在這種情況下我使用'i ++'。 – 2011-09-06 00:23:50