zoukankan      html  css  js  c++  java
  • 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. 遵循遗留系统及所在模块的已有习惯

    如果是在遗留系统中做维护,应遵循已有代码所使用的标准,避免显得格格不入。如果所在开发小组已经习惯于某种命名法,则遵循,避免交流不一致,毕竟怎么命名与开发成败无关。

  • 相关阅读:
    @Value注释失效
    405不支持post请求
    AutoComplete="off"取消input记住之前输入过的内容
    maven解决架包冲突
    HTTP请求中 request payload 和 formData 区别?
    图片视频预览直接将请求下载的url(返回为流)操作和显示
    vue标签属性拼接变量的写法
    计算机中丢失MSVCP120.dll,Photoshopcc2017无法启动(免安装,绿色版本)
    element--循环多个表单,保存和重置怎么办?
    vue---局部刷新和刷新页面的
  • 原文地址:https://www.cnblogs.com/rhcad/p/1976853.html
Copyright © 2011-2022 走看看