1.3 編碼風格的內容
相信讀者已經大致了解具有良好可讀性的代碼應該是什么樣子,或者可以大致體會出不同的編碼風格對代碼可讀性帶來的影響。
良好的編碼風格(coding style)是極其重要的,Linux內核就是一個很好的例子。由于Linux內核的代碼需要被成千上萬的程序員閱讀,因此為了保證代碼的良好可讀性,Linux內核在編碼風格上的要求可以用嚴苛來形容。當我們向Linux內核提交一個拉取請求(pull request,我們可以將拉取請求理解為對代碼進行修改之后的合并請求)時,如果編碼風格不符合規定,則不管修改的內容如何,都會被拒絕。因此,我們在編寫代碼時一定要保證代碼具有良好的編碼風格。
那么,為了養成良好的編碼風格,我們需要注意哪些方面呢?首先,代碼應該滿足良好的排版規則,包括縮進、空格、換行以及大括號的正確位置等。本章后面將以Linux內核的編碼風格為例,詳細介紹這方面的規則。
其次,代碼應該遵循統一的命名規則。常見的命名規則有K&R命名法和駝峰命名法兩種。K&R命名法是Kernighan和Ritchie在《C編程語言》一書中所采用的命名規則。這種規則用小寫形式的單詞和下畫線組合對變量和函數進行命名,如this_is_an_integer
。駝峰命名法源自匈牙利籍程序員Charles Simonyi在微軟任職期間提出的匈牙利命名法,因微軟在Win32 API及其示例代碼中廣泛采用這一命名規則而廣為人知。匈牙利命名法約定了變量的命名由其類型縮寫和首字母大寫的單詞組成,如iThisIsAnInterger
。隨后這一命名法被廣泛用于其他編程語言,如Java、JavaScript等。在使用匈牙利命名法時,由于大寫字母通常會凸出來,因此這種命名法在用于其他編程語言時,常被稱為駝峰命名法。
知識點:Win32
Win32是Windows操作系統發展到3.0版本,開始支持32位的80386處理器時,微軟為Windows操作系統設計的底層基礎API所取的名字,意指針對32位平臺的Windows API。
K&R命名法和駝峰命名法都是常用的命名規則,至于哪個好哪個壞,實在是“蘿卜白菜各有所愛”的事情。但是在同一項目中,應該采用統一的規則,一般不建議混用。通常,K&R命名法在C代碼中更為常見;而駝峰命名法除在Win32代碼中之外,在面向對象編程語言(如C++、Java、Python)中更為常見,但有細微差別,比如在面向對象編程語言中,對屬性或方法則經常使用setLocale
這樣的命名習慣(即首字母縮寫)。
除了變量名和函數名,宏名、枚舉常量名、全局變量名也應該遵循統一的命名規則。例如,宏名一般采用全大寫形式,為避免混淆,通常會添加一些前綴,并使用下畫線分隔不同的單詞。枚舉常量名則以字母K開頭,表示常量(常量對應的constant一詞的發音以k打頭)。程序內部使用的全局變量,其名稱前還會添加一兩個下畫線作為前綴,這樣做是為了防止命名污染,避免一些潛在的問題(如符號沖突、鏈接錯誤等)。
知識點:命名污染
通俗來講,命名污染(naming pollution)就是指“重名”。重復的函數名、變量名、宏名會造成很多問題。簡單的如編譯警告或錯誤,或者鏈接生成可執行文件時報“重復的符號”錯誤,復雜的如重復的全局變量名和局部變量名導致程序執行異常,這些問題均可能需要程序員浪費大量時間來排查。由于設計上的問題,C語言一直未引入類似C++或其他編程語言對命名空間(naming space)的支持,這容易導致命名污染的產生。
編碼風格的其他規則還包括自定義類型的使用、條件編譯的寫法、注釋的寫法,以及一些常見的約定寫法。約定的寫法通常來自經驗的總結,比如如何處理系統可移植性、如何處理處理器架構的可移植性、如何實現國際化和本地化等。
- HTML5+CSS3王者歸來
- Angular UI Development with PrimeNG
- Flink SQL與DataStream入門、進階與實戰
- DevOps入門與實踐
- Julia Cookbook
- FLL+WRO樂高機器人競賽教程:機械、巡線與PID
- 程序是怎樣跑起來的(第3版)
- 基于Struts、Hibernate、Spring架構的Web應用開發
- C#開發案例精粹
- Python語言實用教程
- 21天學通C++(第5版)
- QGIS Python Programming Cookbook(Second Edition)
- 運維前線:一線運維專家的運維方法、技巧與實踐
- HTML5移動前端開發基礎與實戰(微課版)
- Software-Defined Networking with OpenFlow(Second Edition)