匈牙利?!是五日遊嗎?
匈牙利命名法,在當初 C 語言流行的年代,特別是視窗環境下的程式,非常有名的一種變數及常式的命名規範,一般我們以 Naming Convention 或 Coding Convention 來搜尋,就可以找到很多相關的資訊。
像 Java 就有專門出一份文件來探討 Coding Convention。
http://java.sun.com/docs/codeconv/CodeConventions.pdf
而 Hungarian Convention 算是這裡面做得最完整、最詳細也最過火的一種方式了。望名思義,當然發明的人是匈牙利人,Charles Simonyi。
我會接觸到匈牙利命名法,全拜以前做專案時,公家單位依照軟體發展規範(SDG2.0)要求開發廠商開發準則中的一項要求,由我老大一手規範,當時他就以匈牙利命名法為依據,介紹這部份的文章給我們認識。到現在,仍潛移默化的影響著我。
匈牙利命名法的詳細內容,可以參考 wiki 的解說 http://zh.wikipedia.org/zh-hk/%E5%8C%88%E7%89%99%E5%88%A9%E5%91%BD%E5%90%8D%E6%B3%95。
這邊舉幾個書中的例子來說明:
.基礎型別
wn:視窗
scr:螢幕
fon:字型
ch:字元
pa:段落
.字首
a:陣列
c:計數
d:相同型別的兩個變數間的差異值
e:陣列中的元素
g:全域變數
h:代碼(Handle)
i:陣列索引
m:模組變數
標準字首以小寫的字母組成,放在型別的前面,如果宣告一個視窗陣列變數,即會以 awn 為首做變數命名。
.修飾詞
Min:陣列中的第一個元素
First:陣列中需要進行特定工作的第一個元素
Last:陣列中需要進行特定工作的最後一個元素,與 First 相對
Lim:陣列中需要近停餓定工作的元素上限
Max:陣列中的最後一個元素,與 Min 相對
修飾詞必須和字首及基礎型別結合在一起,如:
ipaReformat
i 字首表索引值
pa 基礎型別表文章的段落
Reformat 修飾詞表要做的事情或標的
使用匈牙利命名法,可以依此規則來建立自己的命名慣例,這樣在撰寫程式的時候,養成習慣,自然而然你的變數就會呈現出一定的規則出來,像我們以前常用的
i:表整數型態
s:表字串
c:表字元
l:表常整數
g:表全域變數
我們在撰寫程式的時候就會這樣命名 giPartNoCount 一看就知道這個變數是一個全域變數,整數型態,用來作 PartNo 計數用的,這樣是不是就不用花太多時間去撰寫文件或註解來說明?
當然匈牙利命名法也有其缺點,就是將資料型別也規範在變數中,如果變數要改變資料型別時,就必須要連變數名稱也一起改變,反而會覺得綁手綁腳,不過這也是為了程式容易維護所必須付出的一點代價不是嗎?^^
其實變數的命名,只要有一貫的邏輯與習慣,用得恰當就能發揮他的功效,是否要訂到非常完整與嚴謹?倒是不用這麼遷就,幾個原則抓住,取得共識,在一定的規範下作業,就可以了,畢竟重點仍在程式的撰寫邏輯,與結果吧!
印象中SDG2.0是資策會發行的
嗯 是資策會發行的,謝謝補充
因為找不到相關的網址就沒附上
還有一套軟體技術文件由軟五發行的(軟協,軟體五年計畫)也是類似
不過現在比較夯的是 CMMI