優秀的代碼風格

優秀的代碼風格如同一身得體的打扮,可以給人以良好的印象。 html

初學程序設計,首先必須創建良好的編程習慣,這其中就包括代碼風格。本文就代碼風格中的幾個重點問題進行了討論,並在文後給出了一份優秀的代碼做爲風格模板。代碼風格沒必要花費太多專門的時間研究,在使用中不斷模仿模板代碼,輕輕鬆鬆就能寫出「專業的代碼」。
1、80字符,代碼行極限
程序員

不管時空怎麼轉變,世界怎樣改變,一行80字符應始終銘記心間。古老的Unix終端以80列的格式顯示文本,爲了讓源代碼與手冊具備最佳的可讀性, Unix系統始終堅持着80列的傳統。80列很少很多,足夠寫出一行有意義的代碼,同時也足夠顯示在終端屏幕,足夠打印在A4紙上。雖然時至今日,咱們的屏幕分辨率早已足夠高,一行可以顯示的內容遠超超過80字符,但咱們的優秀傳統已經造成──幾乎全部的Unix/Linux內核源代碼以及聯機用戶手冊都嚴格地遵照着80列極限。若是你正好在使用Windows平臺下的Dev C++,你是否有注意到代碼編輯框裏那條細細的灰色豎線?不錯,那正是代碼行極限。除了HTML、XML等冗長繁複的標記式語言,幾乎全部的語言都須要嚴格遵照代碼行極限,這包括C、C++、Java、C#、Python、PHP等等。不過有時,好比當PHP跟HTML打交道的時候,這個限制是能夠暫時放鬆的。過長的代碼行老是很差的,好的代碼要始終保持苗條的身材。
2、Tab仍是Space,衆說紛紜的縮進方式
編程

代碼離不開縮進,關於縮進主要有兩個爭論,一個是該用空格(Space)仍是用製表符(Tab),另一個是該用4格縮進仍是8格縮進甚至都不是。函數

先來談談Space與Tab的問題。堅持用Space的程序員會告訴你,若是你歷來都不用Tab,那麼你的代碼放到全部的地方看都是同樣的。沒錯,這是用Space縮進的優勢,惋惜的是,這是它惟一的優勢。代碼層次越多,內層代碼最前面的縮進便越多,這意味着你須要敲不少不少次空格。即便你能忍受不厭其煩地按空格鍵直到它壞掉,你也必定會被IDE老是自做聰明地插入一些Tab字符的行爲煩惱不已。建議老是使用Tab縮進,由於幾乎全部的代碼(不只僅是C 代碼)都在使用Tab縮進。spa

Tab究竟是4格仍是8 格?這是Tab縮進會被某些人詬病的根源。當你寫程序時使用的Tab大小與別人讀程序時使用的Tab大小不一樣時,再漂亮的排版也會變得雜亂無章。標準的 Tab是8格的,而不幸的是,幾乎全部的Windows平臺下的IDE,包括 Visual Studio、Dev C++,甚至跨平臺的Eclipse等,都默認使用4格Tab。我使用的FreeBSD系統的全部的內核源代碼都採用8格縮進,因此我一直堅持使用8格縮進。也許你不習慣太大的間距,若是不是在Unix平臺下,或者不是C語言,那就採用4格Tab吧。若是你在Unix下編寫C代碼,使用8格的標準Tab是更好的習慣。
3、折行原則,容易被忽略的角落
設計

既然有代碼行極限,不少狀況下咱們不得不斷開一個完整的代碼行,這就帶來了一個問題:折行後應該如何縮進?好的作法是,第一次折行後,在原來縮進的基礎上增長1/2的Tab大小的空格,以後的折行所有對齊第二行。可能這樣的文字描述過於晦澀了,仍是舉個例子罷(以8格縮進爲例):htm

if (value > a && value > b && value > c && value < d && value < e && value < f
value < h && value < h) { /* 注意折行後的縮進 */
value = value + 1;
value = value * value * value * value * value * value * value * value
* value * value + value * value * value * value * value * value
* value * value; /* 注意再次折行後的縮進 */
} blog

 


顯然這個段代碼沒有任何實際用處,只是爲了說明折行縮進而編造的。
4、無處不在的空格,無處不在的空行
須要空格的位置有:
1)if、while、switch等關鍵字與以後的左括號(之間) if (a>0)
2)左花括號{以前。int main() {}
3)雙目運算符兩側,例如p == NULL。if (a == b)
4)逗號,與分號;以後,例如for (i = 0; i < 10; i++)。
不要空格的位置有:
1)函數名與以後的左括號(,包括帶參數的宏與以後的左括號(,例如max(a, b)。
2)分號;與冒號:以前。 int a; case 1:
3)左括號(右邊,右括號)左邊,例如if (p == NULL)。
須要空行的位置有:
1)函數的定義以前、函數的定義以後
2)一組聯繫緊密的代碼段以前和以後
這些規則並不徹底,當你碰到上面沒有列舉出來的狀況時,請參考本文提供的模板代碼。
5、左花括號的爭議──換行乎?不換乎?
這又是一個仁者見仁智者見智的問題了。從使代碼更清晰的角度看,做爲代碼段開頭標識的左花括號{應該另起一行:ip

if (p == NULL)
{
printf("error!\n");
exit(0);
}/大函數這樣作。
但是,這看起來實在不夠緊湊,因此大部分的C代碼(至少Unix上如此)都採用了這樣的方式:
if (p == NULL) {
printf("error!\n");
exit(0);
}//大函數以內小函數這樣作 get


個人建議是採用後者,這會使你的代碼顯得更加緊湊,也更加專業。須要說明一個特例,在定義函數時,咱們老是要給左花括號{換行:

static int
maxint(int a, int b)
{
return a > b ? a : b;
}

 

(轉自:http://www.cnblogs.com/hnrainll/archive/2011/12/15/2288764.html)

相關文章
相關標籤/搜索