有人喜歡使用for作類似while的迴圈:
for(;;) { }
評論:這是一種風格,有一部分人使用,我個人覺得不如while來得直觀。
究竟是++i,還是i++
for (int i = 0; i < arrayA.Length; ++i) { }
for (int i = 0; i < arrayA.Length; i++) { }
以前我使用i++的寫法,後來,看到一些優秀的代碼中,大多使用++i,我就改用++i了。為什麼使用++i,看到過一些理由,但覺得那些理由,不值一提。
使用i, j, k作多層迴圈
for (int i = 0; i < arrayA.Length; ++i)
{
Object[] arrayB = arrayA[i];
for (int j = 0; j < arrayB.Length; ++j)
{
Object b = arrayB[j]; //此處需要多加註意,一不留神就會寫成Object b = arrayB[i];
}
}
使用i, j, k做多層迴圈時,很容易犯錯誤,如上述代碼中的注釋縮寫的那樣。我參加的程式碼檢閱(Code Review)中,或者開發過程中,經常有同事遇到這種BUG。我也曾經吃過虧,每次編寫i, j, k多層for迴圈時,就會提醒自己,小心,別犯錯誤!
使用for的習慣,除了++i和i++的寫法不同外,還有和if、while等語句一樣的不同寫法,如下:
第一種寫法
a、關鍵字for後面有空格
b、二元運算式左右有空格
c、每個大括弧,單獨佔一行
d、else關鍵字單獨佔一行
for (int i = 0; i < list.Count; ++i)
{
}
第二種寫法:
a、關鍵字if後面有空格
b、二元運算式左右有空格
c、大括弧放在上一句的右邊
for (int i = 0; i < list.Count; ++i) {
}
需要最佳化是,可能你也會採用這種寫法:
int listCount = list.Count;
for (int i = 0; i < listCount; ++i) { }
如果for迴圈中,不會添加或者刪除list的元素,使用這種方式最佳化,可能得到一丁點(可能不值一提)的效能提升。
需要從list中刪除元素時,可能你會使用反序的遍曆。如下:
int listCount = list.Count;
for (int i = listCount - 1; i >= 0; --i)
{
if (condition)
{
list.RemoveAt(i);
}
}
如果list的實現是ArrayList,反序遍曆可能比正序刪除的效能更高一些。
此外,for還有一些其他的使用方式,如:
for (init(); condition(); incement()) { }
for (; i < j; ++i, --j) { };