命名規則是為了增加識別和可讀性,沒有強制的規定,但一旦選擇其中一種,會建議編寫時統一格式;而化學、天文、生物也有其慣用的命名方法;大部分的程式語言也有對此進行建議,以統一風格。
在程式設計的命名上,當變數、函式及類別等名稱由兩個以上的單字組合,就可以使用現有的命名方法,增加識別和可讀性。目前已經出現的命名方法,可以分為Underscore(底線式)、Camel-case(駝峰式)及Hungarian notation(匈牙利命名法)三大類。此文進行彙整,並以個人經驗,探討其優缺點。
一、Underscore(底線式):
單字之間使用底線分隔,GNU/Linux環境中最常見,例如:string_name。
優點:
使用底線取代空格,閱讀上比較直覺易懂。
缺點:
比起Camel-case使用字首大寫取代空格,底線比較少在日常輸入,因此需要適應。
二、Camel-case(駝峰式):
單字之間使用大寫分隔,又可以分為Lower Camel-case(小駝峰式),或Upper
Camel-case(大駝峰式),而後者又稱為Pascal-case(帕斯卡式)。
Lower Camel-case(小駝峰式):
第一個字母用小寫,此變化常用在變數名稱上,例如stringName。
Upper Camel-case(大駝峰式):
第一個字母用大寫,此變化常用在函數、類別、屬性及命名空間上,例如StringName。
優點:
- 可以利用名稱前綴的大小寫,區分變數,以及函數、類別等其他型別。
- 單字之間使用大寫取代底線,能夠減少名稱的長度,減少程式碼超出視窗被遮擋的情況。
缺點:
- 比起Underscore使用底線取代空格,閱讀上較不直覺易懂。
三、Hungarian notation(匈牙利命名法)
在Camel-case(駝峰式)的基礎上,在名稱前綴添加預先約定好的縮寫,例如約定如下:
b boolean c character str C++ String si short integer i integer li long integer f floating point d double-precision floating point ld long double-precision floating point sz Old-Style Null Terminated String if Input File Stream is Input Stream of Output File Stream os Output Stream S declaring a struct C declaring a class Source: http://web.mst.edu/~cpp/common/hungarian.html
根據縮寫用途的不同,又可分為Systems Hungarian,以及Apps Hungarian。
Systems Hungarian:
名稱前前綴代表的是實際的資料型別,例如:strName。
Apps Hungarian:
名稱前綴代表的是目的或其他提示,例如:usName,其中us代表unsafe,為了避免Code injection或XSS,之後必須進行過濾處理。
優點:
- 不需要IDE支援,就能夠從名稱能看出型別。
- 制定好的編碼規則,能夠在搜尋時更加統一易找。
- 制定好的編碼規則,能夠在命名及輸入上更快。
缺點:
- 需要另外學習編碼規則。
- 現代IDE已經可以輕易的區分型別,在資料型別上,此方法稍嫌多餘。
- 變數型別修改時,名稱也必須修正維護。
- 採用縮寫來命名,對新手較不友善,例如szName,不如stringZeroName。
- 也更容易造成歧義,例如szName,更容易被誤讀成其他意思,也難以透過猜測關鍵字搜尋。