良好編碼
考察一段程式碼或者一個函式的好壞:
(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型別的資料寫在後面,這種稱為“以行為中心”
相關文章
- 編碼規範 - 養成良好的Java編碼習慣Java
- 良好的編碼習慣 —— 5 個提高程式碼質量的技巧
- 如何寫出具有良好可測試性的程式碼?
- JavaScript程式碼組織結構良好的5個特點JavaScript
- 如何建立良好的軟體?軟體不僅僅是編寫程式碼而更是開發知識! - csc.gov.sgGo
- IDEA如何設定編碼格式,字元編碼,全域性編碼和專案編碼格式Idea字元
- Modern PHP(二)良好實踐PHP
- 如何定義良好的API?API
- 熵編碼(四)-算術編碼(二)熵
- 影像壓縮編碼碼matlab實現——DM編碼Matlab
- 影像壓縮編碼碼matlab實現——行程編碼Matlab行程
- 如何建立良好的資料模型?模型
- java安全編碼指南之:字串和編碼Java字串
- 字符集編碼(二):字元編碼模型字元模型
- Unicode編碼解碼Unicode
- 影像壓縮編碼碼matlab實現——算術編碼Matlab
- 影像壓縮編碼碼matlab實現——變換編碼Matlab
- 編碼合集
- java編碼Java
- 字元編碼字元
- DER編碼
- 字串-編碼字串
- Emoji 編碼
- python編碼Python
- 字串編碼字串編碼
- 前端進階之養成一個良好的程式碼風格--JavaScript standard style前端JavaScript
- 音視訊編解碼 -- 編碼引數 CRFCRF
- 編碼、摘要和加密(一)——位元組編碼加密
- AOSP 原始碼整編單編原始碼
- 如何與上級保持良好關係
- 一個良好的開發理念TDD
- Javascript編碼解碼URLJavaScript
- MMKV的編碼和解碼
- 檢測檔案編碼,轉換檔案編碼
- 【Codecs系列】硬體編碼器編碼引數分析
- Swift-定位,編碼/反編碼功能的封裝Swift封裝
- Sublime 編寫編譯 swift程式碼編譯Swift
- Protobuf 編碼指南