C++中匈牙利命名法是否该淘汰
在C++中經常使用匈牙利命名法,這在早期是可理解的,那時開發環境(IDE)沒有語法亮顯和自動顯示變量定義的功能,所以使用匈牙利命名法就能一眼看出變量是什么類型的。
說起匈牙利命名法,必須區分匈牙利應用命名法和匈牙利系統命名法,后者在前者基礎上發展而來并蓋過前者。
原始的匈牙利命名法,現在被稱為匈牙利應用命名法,由1972年至1981年在施樂帕洛阿爾托研究中心工作的程序員查爾斯·西蒙尼發明。西蒙尼建議的大多數前綴都是自然語義的,其前綴是為了說明變量的應用屬性或業務屬性,例如“String dogName, manName;”;
而匈牙利系統命名法的前綴是為了說明變量的系統屬性,比如類型,例如“String strName;”,系統命名法在從某種程度上來說是冗余的。
很多人討厭匈牙利命名法,認為多此一舉,看起來令人厭惡,其實應該歸罪于微軟,是微軟Windows誤導和糟蹋了匈牙利命名法。在第一個Windows API包推出時,微軟在示例代碼和API中大量使用由變量類型作前綴的命名法,由于微軟強大的影響力,以至于非常多的軟件都以此為標準。雖然西蒙尼在很早時就意識到這個問題,但他也無法阻擋這種趨勢,只好和微軟這種命名法劃定界限,分出匈牙利應用命名法和匈牙利系統命名法。在微軟內部,除了Word和Excel開發團隊還在使用最原始的匈牙利應用命名法,其他團隊和其他公司都在使用微軟推出的匈牙利系統命名法。隨時不斷發展,基本上很少有人知道最初的匈牙利命名法了。后來很多人發現匈牙利系統命名法的缺點,大量攻擊其缺陷,推薦大家不要再用匈牙利命名法,連同匈牙利應用命名法也一同受到否定。
我支持下列觀點:
1. 一般不使用匈牙利系統命名法,不用前綴也能明白含義的就不用,其次是優先使用匈牙利應用命名法
a. int nCount --> count; (小寫字母開頭)
b. CString strPluginName --> pluginName; (其余單詞首字母大寫)
c. std::wstring wstrFileName --> filename or fileName; (如果變量名較短,可全部小寫,只要不影響閱讀)
d. int cxWin, cyWin; (使用表示應用屬性或業務屬性的小寫字母做前綴)
e. char* tmpName; (匈牙利應用命名法)
2. 在使用MFC或Windows API時,可以使用匈牙利系統命名法,對于指針變量可使用p前綴
a. CListBox wndItems;
b. CPoint ptCursor; CRect rcBtn;
c. LPCTSTR pszName; or pName;
d. Cx_Interface<Ix_MyObj> pIFObj; Cx_Ptr objItem;
3. 遵循遺留系統及所在模塊的已有習慣
如果是在遺留系統中做維護,應遵循已有代碼所使用的標準,避免顯得格格不入。如果所在開發小組已經習慣于某種命名法,則遵循,避免交流不一致,畢竟怎么命名與開發成敗無關。
總結
以上是生活随笔為你收集整理的C++中匈牙利命名法是否该淘汰的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【javascript】操作符:一元操作
- 下一篇: Cypress学习笔记4——编写第二个测