良好的代码风格养成记
綜述
優秀的代碼風格如同一身得體的打扮,能夠給人以良好的印象。初學程序設計,首先必須建立良好的編程習慣,這其中就包括代碼風格。本文就代碼風格中的幾個重點問題進行了討論,并在文后給出了一份優秀的代碼作為風格模板。代碼風格不必花費太多專門的時間研究,在使用中不斷模仿模板代碼,輕輕松松就能寫出“專業的代碼”。
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打交道的時候,這個限制是可以暫時放松的。過長的代碼行總是不好的,好的代碼要始終保持苗條的身材。
Tab還是Space,眾說紛紜的縮進方式
代碼離不開縮進,關于縮進主要有兩個爭論,一個是該用空格(Space)還是用制表符(Tab),另外一個是該用4格縮進還是8格縮進甚至都不是。
先來談談Space與Tab的問題。堅持用Space的程序員會告訴你,如果你從來都不用Tab,那么你的代碼放到所有的地方看都是一樣的。沒錯,這是用Space縮進的優點,可惜的是,這是它唯一的優點。代碼層次越多,內層代碼最前面的縮進便越多,這意味著你需要敲很多很多次空格。即使你能忍受不厭其煩地按空格鍵直到它壞掉,你也一定會被IDE總是自作聰明地插入一些Tab字符的行為煩惱不已。建議總是使用Tab縮進,因為幾乎所有的代碼(不僅僅是C 代碼)都在使用Tab縮進。
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是更好的習慣。
折行原則,容易被忽略的角落
既然有代碼行極限,很多情況下我們不得不斷開一個完整的代碼行,這就帶來了一個問題:折行后應該如何縮進?好的做法是,第一次折行后,在原來縮進的基礎上增加1/2的Tab大小的空格,之后的折行全部對齊第二行??赡苓@樣的文字描述過于晦澀了,還是舉個例子罷(以8格縮進為例):
if(value > a && value > b && value > c && value < d && value < e && value < fvalue < 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; /* 注意再次折行后的縮進 */ }| 1 2 3 4 5 6 7 | 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; /* 注意再次折行后的縮進 */ } |
顯然這個段代碼沒有任何實際用處,只是為了說明折行縮進而編造的。
無處不在的空格,無處不在的空行
需要空格的位置有:
- if、while、switch等關鍵字與之后的左括號(之間。
- 左花括號{之前。
- 雙目運算符兩側,例如p == NULL。
- 逗號,與分號;之后,例如for (i = 0; i < 10; i++)。
不要空格的位置有:
- 函數名與之后的左括號(,包括帶參數的宏與之后的左括號(,例如max(a, b)。
- 分號;與冒號:之前。
- 左括號(右邊,右括號)左邊,例如if (p == NULL)。
需要空行的位置有:
- 函數的定義之前、函數的定義之后
- 一組聯系緊密的代碼段之前和之后
這些規則并不完全,當你碰到上面沒有列舉出來的情況時,請參考本文提供的模板代碼。
左花括號的爭議──換行乎?不換乎?
這又是一個仁者見仁智者見智的問題了。從使代碼更清晰的角度看,作為代碼段開頭標識的左花括號{應該另起一行:
if (p == NULL) {printf("error!\n");exit(0); }| 1 2 3 4 5 | if (p == NULL) { ????????printf("error!\n"); ????????exit(0); } |
可是,這看起來實在不夠緊湊,所以大部分的C代碼(至少Unix上如此)都采用了這樣的方式:
if (p == NULL) {printf("error!\n");exit(0); }| 1 2 3 4 | if (p == NULL) { ????????printf("error!\n"); ????????exit(0); } |
我的建議是采用后者,這會使你的代碼顯得更加緊湊,也更加專業。需要說明一個特例,在定義函數時,我們總是要給左花括號 { 換行:
static int maxint(int a, int b) {return a > b ? a : b; }| 1 2 3 4 | static int maxint(int a, int b) { ????????return a > b ? a : b; } |
額,不過我還是不太習慣額
總結
本文介紹了編程的代碼風格,希望對大家有幫助
本文內容為轉載,原文出處
轉載請注明:靜覓 ? 良好的代碼風格養成記
總結
以上是生活随笔為你收集整理的良好的代码风格养成记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言小知识点练习总结
- 下一篇: 深度学习(一)深度学习学习资料