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