my favorite

2007/08/19

匈牙利命名法

讓錯的程式看得出錯
看了網路上Joel Spolsky(譯:周思博)的一篇文章後
才大概瞭解了匈牙利命名法的一些技巧以及謬誤
而謬誤只差別在Type以及Kind這兩個字對於大眾的觀感而已
(variable_name = scope_typeDescription, ex: m_intCounter)
Type在程式上是個keyword,主要是來讓compiler瞭解variable所佔的記憶體空間
更進階的功用,還能夠讓compiler裡瞭解這個variable的外貌
而這個keyword包含了byte, char, string, int, long, float, double..etc
在當時C程式盛行之時,Type的種類並不多
所以依照匈牙利命名法來說,開頭的字串(也稱為前綴字串、prefix)
根據variable的life scope會有以下幾種類型

  1. g_ (for global or static variable)
  2. m_ (for member variable)
  3. c_ (for constant)
而加上Type以及Description之後,變數名稱可能有以下的組合
  • g_intInstCounter (global instance counter : int)
  • m_stringName (member name : string)
  • c_stringBrithday (const brithday : string)
然而,在1995至2005的這十年間,C++以及Java等OOP的盛行
造成了許多的麻煩,因為強大的compiler可以做type之間的casting
例如 i = j + k,由於type的不同,operator也會有不同的操作
如果 i, j, k都是int,那麼"+"會是一般的整數加法
如果i, j, k都是string,那麼"+"會將string進行串接(concatenate),並assign給 i
那麼..如果i為int, j, k是string,抑或i, j 為string, k 是 int呢?

記得兩年前,那時學長曾說過,匈牙利命名法已經不適合現今的程式設計師使用
但是現在看起來似乎是一種誤會.. (續)


No comments:

BIO

Taipei, GuTing, Taiwan

huang47 | personal

huang47 | personal