iT邦幫忙

DAY 13
6

程式設計心法系列 第 13

程式設計心法:12.變數命名--匈牙利命名法

匈牙利?!是五日遊嗎?

匈牙利命名法,在當初 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 計數用的,這樣是不是就不用花太多時間去撰寫文件或註解來說明?

當然匈牙利命名法也有其缺點,就是將資料型別也規範在變數中,如果變數要改變資料型別時,就必須要連變數名稱也一起改變,反而會覺得綁手綁腳,不過這也是為了程式容易維護所必須付出的一點代價不是嗎?^^

其實變數的命名,只要有一貫的邏輯與習慣,用得恰當就能發揮他的功效,是否要訂到非常完整與嚴謹?倒是不用這麼遷就,幾個原則抓住,取得共識,在一定的規範下作業,就可以了,畢竟重點仍在程式的撰寫邏輯,與結果吧!

本系列文章


上一篇
程式設計心法:11.變數命名--命名的考量因素
下一篇
程式設計心法:13.變數命名--使用變數的注意事項
系列文
程式設計心法31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
alexc
iT邦高手 1 級 ‧ 2009-10-19 10:45:35

印象中SDG2.0是資策會發行的

jamesjan iT邦高手 1 級 ‧ 2009-10-19 12:04:01 檢舉

嗯 是資策會發行的,謝謝補充
因為找不到相關的網址就沒附上

還有一套軟體技術文件由軟五發行的(軟協,軟體五年計畫)也是類似

不過現在比較夯的是 CMMI

0
pantc328
iT邦高手 1 級 ‧ 2009-10-19 16:07:03

好像不是吧!
這種東西應該是外國人的傑作.

我要留言

立即登入留言