匈牙利命名法

2021-09-13 08:55:24 字數 1186 閱讀 2836

從事windows下c/c++程式設計的人很可能遇到過類似ncountstperson這類風格的命名,這類風格的命名方式即為匈牙利命名法。

匈牙利命名法(hungariannotation)是由匈牙利裔美國人charles simony發明的,由於其單詞排列順序類似古怪的匈牙利姓名而得名。

實際上charles simony發明的是應用型匈牙利命名法,由於被曲解、以訛傳訛,形成了我們常見的系統型匈牙利命名法。文章開頭的兩個例子的風格來自於系統型匈牙利命名法。

這段歷史在joel on software的《讓錯的程式看得出錯》有詳細的介紹。

應用型匈牙利命名法和系統型匈牙利命名法都是通過字首+物件描述的形式命名。

windows開發的聖經《windows 程式設計》第一版大量使用了匈牙利命名法,所以系統型匈牙利命名法是windows開發的事實標準。但隨後的反對也愈演愈烈,在.net第一次發布時達到了高潮。微軟在.net框架的《通用命名約定》中明確說明不建議使用匈牙利命名法。到現在,除了一些遺產**,新的**已經鮮見系統型匈牙利命名法了,而且《windows 程式設計》第六版也不怎麼使用匈牙利命名法了。

我認為其的幾個缺點:

圖中是rust的**段,guess後面的string是ide推斷出的,現代的工具已經很發達,能有效避免這種純手工的標註。

其他語言同理。

型別不一致導致的問題,在大多數語言的編譯器都會產生錯誤或警告,人工做編譯器的工作,沒有必要。如果出錯,大部分錯誤都是邏輯錯誤,這種型別標註幫不了什麼忙。

該命名法對於c++引入模板容器來說就是災難。引入的容器、迭代器等等很多,單字母已經無法表示,姑且用vec表示std::vector,那該模板類的例項std::vector怎麼表示?

即使能表示,std::vector>>這個又怎麼表示?

世上沒有解決不了的問題,上述的問題肯定也是可以解決的,只要制定相應的規則即可。問題是:這個成本能得到多大的回報。對於系統匈牙利命名法來說,是沒有必要的。

匈牙利命名法

匈牙利命名法 匈牙利命名法是一種程式設計時的命名規範。基本原則是 變數名 屬性 型別 物件描述,其中每一物件的名稱都要求有明確含義,可以取物件名字全稱或名字的一部分。命名要基於容易記憶容易理解的原則。保證名字的連貫性是非常重要的。舉例來說,表單的名稱為form,那麼在匈牙利命名法中可以簡寫為frm,...

匈牙利命名法

匈牙利命名法是一種程式設計時的命名規範。基本原則是 變數名 屬性 型別 物件描述,其中每一物件的名稱都要求有明確含義,可以取物件名字全稱或名字的一部分。命名要基於容易記憶容易理解的原則。保證名字的連貫性是非常重要的。舉例來說,表單的名稱為form,那麼在匈牙利命名法中可以簡寫為frm,則當表單變數名...

匈牙利命名法

匈牙利命名法 匈牙利命名法是一種程式設計時的命名規範。基本原則是 變數名 屬性 型別 物件描述,其中每一物件的名稱都要求有明確含義,可以取物件名字全稱或名字的一部分。命名要基於容易記憶容易理解的原則。保證名字的連貫性是非常重要的。舉例來說,表單的名稱為form,那麼在匈牙利命名法中可以簡寫為frm,...