現有命名方法彙整及比較

命名規則是為了增加識別和可讀性,沒有強制的規定,但一旦選擇其中一種,會建議編寫時統一格式;而化學、天文、生物也有其慣用的命名方法;大部分的程式語言也有對此進行建議,以統一風格。

在程式設計的命名上,當變數、函式及類別等名稱由兩個以上的單字組合,就可以使用現有的命名方法,增加識別和可讀性。目前已經出現的命名方法,可以分為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,更容易被誤讀成其他意思,也難以透過猜測關鍵字搜尋。