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. 遵循遗留系统及所在模块的已有习惯

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

  • 相关阅读:
    log4Net使用
    VS Code入门
    用VS Code写Python
    C#(99):LINQ查询操作符实例
    C#(99):LINQ to Objects(2)
    spring mvc 配置对静态资源的访问
    EntLib 自动数据库连接字符串加密
    块级格式化上下文( Block formatting contexts)
    Entlib DAAB映射枚举类型
    js 继承
  • 原文地址:https://www.cnblogs.com/rhcad/p/1976853.html
Copyright © 2011-2022 走看看