命名
對於理解應用程序的邏輯流,命名方案是最有影響力的一種幫助。名稱應該說明“什麼”而不是“如何”。通過避免使用公開基礎實現(它們會發生改變)的名稱,可以保留簡化複雜性的抽象層。例如,可以使用 GetNextStudent(),而不是 GetNextArrayElement()。
命名原則是:選擇正確名稱時的困難可能表明需要進一步分析或定義項的目的。使名稱足夠長以便有一定的意義,並且足夠短以避免冗長。唯一名稱在編程上僅用於將各項區分開。表現力強的名稱是爲了幫助人們閱讀;因此,提供人們可以理解的名稱是有意義的。不過,請確保選擇的名稱符合適用語言的規則和標準。
以下幾點是推薦的命名方法。
例程
避免容易被主觀解釋的難懂的名稱,如對於例程的 AnalyzeThis(),或者對於變量的 xxK8。這樣的名稱會導致多義性,而不僅僅是抽象。
在面向對象的語言中,在類屬性的名稱中包含類名是多餘的,如 Book.BookTitle。而是應該使用 Book.Title。
使用動詞-名詞的方法來命名對給定對象執行特定操作的例程,如 CalculateInvoiceTotal()。
在允許函數重載的語言中,所有重載都應該執行相似的函數。對於那些不允許函數重載的語言,建立使相似函數發生關係的命名標準。
變量
只要合適,在變量名的末尾追加計算限定符(Avg、Sum、Min、Max、Index)。
在變量名中使用互補對,如 min/max、begin/end 和 open/close。
鑑於大多數名稱都是通過連接若幹單詞構造的,請使用大小寫混合的格式以簡化它們的閱讀。另外,爲了幫助區分變量和例程,請對例程名稱使用 Pascal 大小寫處理 (CalculateInvoiceTotal),其中每個單詞的第一個字母都是大寫的。對於變量名,請使用 camel 大小寫處理 (documentFormatType),其中除了第一個單詞外每個單詞的第一個字母都是大寫的。
布爾變量名應該包含 Is,這意味着 Yes/No 或 True/False 值,如 fileIsFound。
在命名狀態變量時,避免使用諸如 Flag 的術語。狀態變量不同於布爾變量的地方是它可以具有兩個以上的可能值。不是使用 documentFlag,而是使用更具描述性的名稱,如 documentFormatType。
即使對於可能僅出現在幾個代碼行中的生存期很短的變量,仍然使用有意義的名稱。僅對於短循環索引使用單字母變量名,如 i 或 j。
不要使用原義數字或原義字符串,如 For i = 1 To 7。而是使用命名常數,如 For i = 1 To NUM_DAYS_IN_WEEK 以便於維護和理解。
表
在命名錶時,用單數形式表示名稱。例如,使用 Employee,而不是 Employees。
在命名錶的列時,不要重複表的名稱;例如,在名爲 Employee 的表中避免使用名爲 EmployeeLastName 的字段。
不要在列的名稱中包含數據類型。如果後來有必要更改數據類型,這將減少工作量。
Microsoft SQL Server
不要給存儲過程加 sp 前綴,這個前綴是爲標識系統存儲過程保留的。
不要給用戶定義的函數加 fn_ 前綴,這個前綴是爲標識內置函數保留的。
不要給擴展存儲過程加 xp_ 前綴,這個前綴是爲標識系統擴展存儲過程保留的。
雜項
儘量減少使用縮寫,而是使用以一致方式創建的縮寫。縮寫應該只有一個意思;同樣,每個縮寫詞也應該只有一個縮寫。例如,如果用 min 作爲 minimum 的縮寫,那麼在所有地方都應這樣做;不要將 min 又用作 minute 的縮寫。
在命名函數時包括返回值的說明,如 GetCurrentWindowName()。
與過程名一樣,文件和文件夾的名稱也應該精確地說明它們的用途。
避免對不同的元素重用名稱,如名爲 ProcessSales() 的例程和名爲 iProcessSales 的變量。
在命名元素時避免同音異義詞(如 write 和 right),以防在檢查代碼時發生混淆。
在命名元素時,避免使用普遍拼錯的詞。另外,應清楚區域拼寫之間存在的差異,如 color/colour 和 check/cheque。
避免用印刷標記來標識數據類型,如用 $ 代表字符串或用 % 代表整數。