2008年6月5日 星期四

關於匈牙利命名法的討論

進入公司後看到的 Code 大部分都是用 匈牙利命名法 這個規則命名的。一開始的時候看到變數前面有m_、n、sz、lp等等一連串的怪怪 prefix ,讓本來就不懂的程式碼看起來更加痛苦。但是慢慢的了解了這個規則以後,發現到看別人的程式,如果有這樣的命名其實還不錯。

像是大家常常喜歡執行一個 Member Function 來改變 Member Variables ,當然程式如果是自己寫的很容易就知道那些 Member Variables 被修改了。但是這可苦了看你程式的人,尤其是沒有寫 Function 註解的時候。往往一個 Member Function 做完了以後,沒有回傳值,根本不曉得它到底做了些什麼。

所以說 匈牙利命名法 真的這麼好嗎?

在網路上搜尋的結果,發現到當然也是有人覺得它不錯,但是下面這篇討論,指出了它受到質疑的缺點 : 匈牙利命名法討論的文章

當然缺點裡面有誇大的地方,不見得所有的地方都是不好的。Making Wrong Code Look Wrong(中文)這篇文章,就指出了 匈牙利命名法 最初的原意。它的用途在於知道變數的種類(Kind),而不是型態(Type)。知道變數的種類(Kind)就能幫助看程式的人,從變數本身看出程式碼的錯誤。文章裡面也有舉了一個例子來說明。

所以當你使用 匈牙利命名法 來命名的時候,可以想想看這樣的做法是否可以幫助你了解程式,以及對程式的除錯是否有幫助。不然這樣的做法會讓程式的變數看起來眼花撩亂,可能跟你原本想要的結果大有不同 (最終目的是幫助程式的閱讀)。

參考資料 :發佈文章
Making Wrong Code Look Wrong(英文) - http://www.joelonsoftware.com/articles/Wrong.html
Making Wrong Code Look Wrong(中文) - http://chinesetrad.joelonsoftware.com/Articles/Wrong.html
匈牙利命名法討論的文章 - http://tsjeremy.spaces.live.com/blog/cns!BD4EB7F462639B16!1346.entry

沒有留言: