一直以來,有不少學生在學習(xi) 編程後,都會(hui) 問我在編寫(xie) 代碼時需要注意什麽(me) ,怎麽(me) 樣才能讓代碼顯得更加清晰,變量定義(yi) 更合理,寫(xie) 起來更順暢。
這是一個(ge) 非常好的問題,養(yang) 成良好編碼習(xi) 慣的學生,會(hui) 覺得寫(xie) 起代碼來很順暢,整個(ge) 代碼條理清晰,寫(xie) 起來特別上頭,代碼編寫(xie) 過程很有成就感。
從(cong) 計算機運行效率的角度來說,代碼編寫(xie) 的好一些並不會(hui) 增加運行效率,但是它會(hui) 影響到人的心情。這就像寫(xie) 一篇作文,卷麵整潔,字體(ti) 工整的文章會(hui) 讓人感覺跟舒服,寫(xie) 的人也會(hui) 更有成就感。特別是有一些比較重要的邏輯,如果寫(xie) 的比較清晰,隔斷時間後再看起來,會(hui) 很快理解當時編寫(xie) 代碼的思路,不至於(yu) 讓人感覺很費解。同時,代碼共享給其他人,也比較方便其他人觀看。
另外,形成良好的編寫(xie) 習(xi) 慣後,會(hui) 避免很多低級的錯誤。很多學生寫(xie) 代碼的過程會(hui) 人為(wei) 的引入很多低級錯誤,例如變量名寫(xie) 錯了,有時候在 for 循環中,寫(xie) 錯一個(ge) 變量名稱會(hui) 導致各種奇怪問題,而且很難檢測出來。
那麽(me) 怎麽(me) 才算是好的代碼風格呢? 怎麽(me) 樣養(yang) 成好的代碼習(xi) 慣呢? 代碼風格問題涉及到的內(nei) 容很多,每種編程語言都有自己的編程風格,每家公司也會(hui) 製定自己的編碼標準。工程代碼中的代碼風格和算法中的代碼風格也並不完全相同,以下我們(men) 就以C++ 為(wei) 例,針對USACO算法競賽中的代碼風格做一個(ge) 介紹:
- 代碼各部分定義清晰:
對於(yu) C++ 文件來說,一份代碼會(hui) 分成幾個(ge) 區域,包括頭文件引入、類型定義(yi) 、變量定義(yi) 、函數定義(yi) 等,即使代碼很簡單,也會(hui) 包括這幾個(ge) 部分,所以建議可以清晰的把這幾個(ge) 部分依次寫(xie) 出來,可以參考以下示例:
上述代碼是一份很簡單的查詢數組中最大值的算法。把每個(ge) 部分的代碼放在應有的區域中,當遇到bug 時,很容易在固定區域中查詢相關(guan) 代碼的定義(yi) 。
- 變量定義(yi)
在很多工程性代碼中,是不建議把變量定義(yi) 成全局的,但在算法編程中則是鼓勵這樣做的。主要的好處在於(yu) ,第一可以方便在各個(ge) 函數中訪問。第二全局變量默認是有初始化的,不容易產(chan) 生不必要的錯誤。第三有些比較大的數組,如果定義(yi) 在函數中可能會(hui) 導致堆棧空間不足。
另外,一些臨(lin) 時變量,建議需要使用的時候再定義(yi) ,例如 for 語句的循環變量,直接定義(yi) 在 for 語句中是比較好的選擇,多個(ge) for 語句可以使用相同的循環變量,相互之間並不影響。
關(guan) 於(yu) 變量命名方麵,建議在能夠表達具體(ti) 意義(yi) 的情況下,采用盡可能短的名稱。一些常常使用的變量名稱可以固定下來,例如循環變量,一般都使用 i,j,k 等。
- 模塊劃分
在編寫(xie) 代碼的時候,同一邏輯的代碼可以緊湊些,不同邏輯的代碼則可以空一行,或者加一個(ge) 注釋,這樣能夠很方便區分各個(ge) 部分的代碼實現了什麽(me) 邏輯。對於(yu) 比較長的代碼,可以考慮分成多個(ge) 函數,每個(ge) 函數盡量隻實現邏輯單一的功能。
- 關(guan) 鍵模塊注釋
算法的一些比較關(guan) 鍵的邏輯可以加一些注釋,例如整體(ti) 算法的思路,算法中關(guan) 鍵的某一個(ge) 步驟等。寫(xie) 注釋的過程可以幫你進一步理順思路,並且增加注釋後,後續如果要修改,也能很快理解之前的思考邏輯。
很多計算機高手在編碼上都是有潔癖的,喜歡整潔,簡短,清晰的代碼風格。好的代碼習(xi) 慣,也會(hui) 讓人在編程時產(chan) 生成就感和愉悅感。為(wei) 了讓自己在後續的編碼過程中能夠更加舒暢,請盡早養(yang) 成好的編碼習(xi) 慣吧。
評論已經被關(guan) 閉。