代碼風格的基本原則是:簡明,易讀,無二義性。
-------------------------------------------------
1、 縮進
是用Tab鍵好,還是2、4、8個空格?
推薦:4個空格,在VS2005和其他的一些編輯工具中都可以定義Tab鍵擴展成爲幾個空格鍵。不用 Tab鍵的理由是Tab鍵在不同的情況下會顯示不同的長度。4個空格的距離從可讀性來說正好。
2、 行寬
行寬必須限制,但是以前有些文檔規定的80字符行寬太小了(以前的計算機/打字機顯示行寬爲80字符),現在時代不同了,可爲100字符。
3、 括號
在複雜的條件表達式中,用括號清楚地表示邏輯優先級。
4、 斷行與空白的{ }行
最精簡的格式A:
if (condition) DoSomething();
else DoSomethingElse();
有人喜歡這樣,因爲可以節省幾行,但是不同的語句(Statement)放在一行中,會使程序調試(DeBug)非常不方便,如果要一步一步觀察condition(condition有可能是包含函數調用的複雜表達式)中各個變量的變化情況,單步執行就很難了。
上面程序中沒有明確的“{”和“}”來判斷程序的結構,在有多層控制嵌套的時候,就不容易看清結構和對應關係。
採用如下風格的程序:
if ( condition) {
DoSomething();
} else {
DoSomethingElse();
}
或者if ( condition)
{
DoSomething();
}
else
{
DoSomethingElse();
}
5、 分行
不要把多行語句放在一行上。
a = 1; b = 2; // bogus
if (fFoo) Bar(); // bogus
更嚴格地說,不要把不同的變量定義在一行上。
Foo foo1, foo2; // bogus
6、 命名
採用有意義的變量和方法名稱。
一般使用匈牙利命名規範。
7、 下劃線問題
下劃線用來分隔變量名字中的作用域標註和變量的語義,如:一個類型的成員變量通常用m_來表示。
8、 大小寫問題
由多個單詞組成的變量名,如果全部都是小寫,很不易讀,一個簡單的解決方案就是用大小寫區分它們。
Pascal——所有單詞的第一個字母都大寫;
Camel——第一個單詞全部小寫,隨後單詞隨Pascal格式,這種方式也叫lowerCamel。
一個通用的做法是:所有的類型/類/函數名都用Pascal形式,所有的變量都用Camel形式。
類/類型/變量:名詞或組合名詞,如Member、ProductInfo等。
函數則用動詞或動賓組合詞來表示,如get/set; RenderPage()。
9、 註釋
誰不會寫註釋?但是,需要註釋什麼?
不要註釋程序是怎麼工作的(How),你的程序本身就應該能說明這一問題。
//this loop starts the i from 0 to len, in each step, it
// does SomeThing
for (i = 0; i<len; i++)
{
DoSomeThing();
}
以上的註釋是多餘的。註釋是用來解釋程序做什麼(What),爲什麼這樣做(Why),以及要特別注意的地方的,如下:
//go thru the array, note the last element is at [len-1]
for (i = 0; i<len; i++)
{
DoSomeThing();
}
複雜的註釋應該放在函數頭,很多函數頭的註釋都是解釋參數的類型等的,如果程序正文已經能夠說明參數的類型in/out等,就不要重複!
註釋也要隨着程序的修改而不斷更新,一個誤導的(Misleading)註釋往往比沒有註釋更糟糕。
另外,註釋(包括所有源代碼)應只用ASCII字符,不要用中文或其他特殊字符,它們會極大地影響程序的可移植性。
在現代編程環境中,程序編輯器可以設置各種好看的字體,我們可以使用不同的顯示風格來表示程序的不同部分。