良好編碼

老司機的詩和遠方發表於2020-04-06

考察一段程式碼或者一個函式的好壞:
(1)程式設計風格
(2)出錯處理
(3)演算法複雜度分析,主要是做效能的分析

當然真正的高質量程式碼是需要不斷琢磨,必須耐得住正確性、健壯性、可靠性、效率、易用性、可讀性、可擴充套件性、可複用性、相容性、可移植性考驗。
也存在這樣的兩種人:
(1)程式設計老手可能會長期用隱含錯誤的方式程式設計(習慣成自然),發現毛病後都不願相信那是真的!
(2)程式設計高手可以在某一領域寫出極高水平的程式碼,但未必能把全域性把握軟體質量的方方面面。
程式設計老手:能夠長期穩定地編寫出高質量程式的程式設計師
程式設計高手:能長期穩定地編寫出高難度、高質量程式的程式設計師

【修仙程式設計師】知錯能改,經常溫故而知新,堅持學習天天向上。

程式碼檔案版權和版本宣告

版權和版本的宣告位於標頭檔案和定義檔案的開頭,主要的內容有:
(1)版權資訊
(2)檔名稱,識別符號,摘要
(3)當前版本號,作者/修改者,完成日期
(4)版本歷史資訊

這裡寫圖片描述

標頭檔案的結構:
標頭檔案由三個部分組成:
(1)標頭檔案開頭處的版權和版本宣告
(2)預處理塊
(3)函式和類結構宣告等
並且應該使用防重複包含語句,ifndef/define/endif。標頭檔案建議:
(1)標頭檔案建議只存放宣告,而不存放定義。可能有些程式設計師為了實現內聯,在標頭檔案裡面直接寫實現,但是這樣的做法是不可以取的,為了實現內聯就犧牲了風格一致是不好的一件事。建議加上inline,實現還是放在實現檔案中
(2)不提倡使用全域性變數,儘量不要在標頭檔案中出現象extern int value;這類申明
這裡寫圖片描述

定義檔案的結構
定義檔案有三部分內容:
(1)定義檔案開頭處的版權和版本宣告
(2)標頭檔案引用
(3)程式的實現體(包括資料和程式碼)
這裡寫圖片描述

標頭檔案作用

(1)通過標頭檔案來呼叫庫功能,在很多場合,原始碼不便或者不準向使用者公佈,只要向使用者提供標頭檔案和二進位制的庫即可。使用者只需要按照標頭檔案的介面宣告來呼叫庫功能,而不必關心介面怎麼實現的,編譯器會從庫中提取相應的程式碼
(2)標頭檔案能加強型別安全檢查,如果某個介面被實現或者被使用,某方式與標頭檔案中的宣告不一致,編譯器就會指出錯誤,這一簡單的規則能大大減輕程式設計師除錯,改錯的負擔

空行的使用
巧用空行也可以起著分隔程式段落的作用,空行得體將使程式的佈局更加清晰,空行不會浪費記憶體,雖然列印含有空行的程式是會多消耗一些紙張,不要因此而捨不得用空行。
(1)每個類宣告之後,每個函式定義結束之後都要加空行。
(2)在一個函式體內,邏輯上密切相關的語句之間不加空行,其他地方加空行分隔。
這裡寫圖片描述

程式碼行
(1)一行程式碼只做一件事情,如只定義一個變數,或只寫一條語句。這樣的程式碼容易閱讀,並且方便於寫註釋。
(2)if,for,while,do等語句自佔一行,執行語句不得緊跟其後。不論執行語句有多少都要加{},這樣可以防止書寫錯誤。
(3)儘可能在定義變數的同時初始化該變數(就近原則),減少隱患
(4)關鍵字之後必留空格,const,virtual,inline,case等關鍵字
(5)‘,’之後要留空格,如Function(x, y, z)
(6)二元操作符的前後應當加空格,如“=”,“+=”,“>=”,“<=”…….
(7)一元操作符如“!”,“~”,“++”,“–”“&”等前後不加空格
(8)象“[]”“.”“->”也不加空格
(9)當然有時候也可以根據實際情況去掉一些空格,使得整個佈局好看如下:
這裡寫圖片描述

對齊
(1)程式的分界符‘{’和‘}’應獨佔一行並且位於同一列,同時與引用它們的語句左對齊。
(2){}之內的程式碼塊在‘{’右邊數格處左對齊。

長行拆分
(1)程式碼行最長長度宜控制70-80個字元以內,程式碼行不要過長,否則眼睛看不過來,也不便於列印
(2)長表示式要在低優先順序操作符處拆分成新行,操作符放在新行之首,以便突出操作符,拆分出的新行要進行適當的縮排,使排版整齊,語句可讀。
這裡寫圖片描述

修飾符的位置
修飾符*和&應該靠近資料型別還是該靠近變數名,是個有爭議的話題。
這裡建議大家將和&寫跟變數一起,可以減少一些誤解。例如int * x,y;這裡如果*靠近int會引起以為y也是指標變數!!!

註釋
行註釋用//,塊註釋用/ * ……..*/。
主要用在版本、版權申明,函式介面說明,重要程式碼行或段落提示。
(1)註釋是對程式碼的提示,而不是文件。程式中的註釋不可喧賓奪主,註釋太多了會讓人眼花繚亂,註釋的花樣要少。
(2)如果程式碼本來就是清楚的,則不必加註釋,否則多此一舉,令人厭煩。
(3)邊寫程式碼邊註釋,修改程式碼同時修改相應的註釋,以保證註釋與程式碼的一致性。
(4)防止註釋有二義性,應當準確,易懂,杜絕錯誤的註釋!
(5)儘量避免在註釋中使用縮寫,特別是不常用縮寫。
(6)註釋的位置應與被描述的程式碼相鄰,可以放在程式碼的上方或右方,不可放在下方。
(7)程式碼比較長,特別是有多重巢狀時,應當在一些段落的結束處加註釋,便於閱讀。

類的板式

(1)private型別的資料寫在前面,而將public型別的函式寫在後面,這種方式成為“以資料為中心”
(2)public型別的函式寫在前面,而將private型別的資料寫在後面,這種稱為“以行為中心”
這裡寫圖片描述

相關文章