引题:这两天整理资料~~整理时翻出来前一阵子群里的某个朋友发给我让我帮忙解决的一段代码~~~由于当时忙碌没有细看,于是又翻看了一遍。说实话变量命名上确实有些糟糕(o(∩_∩)o...嘘~~大家不要说是谁哈~~)。于是我想发一个小讨论,就变量命名法方面一起再次学习深入一下。切入正题:以前在做C++的时候,由于微软的影响,在命名规则上普遍使用的都是匈牙利命名法。这里咱们暂且不讨论匈牙利命名法是否能够带来代码成本的最大收益,至少他影响了一大批代码开发人员。随着eclipse等高智能IDE的发展,我们似乎已经不需要再去使用一系列复杂的前缀来标识我们的变量。在刚刚转到Java的时候我还保留着用m_来写一个成员变量。但是随后在翻看了很多大师级的人物编写的代码之后,我发现几乎没有那个声名显赫的开源的项目还在用这种大名鼎鼎命名法。于是我也就慢慢的改掉了这种繁琐的命名习惯。这都是后话。提出题目:1.在Java的代码开发过程中,你是否还愿意去使用匈牙利命名法来命名你的变量吗?2.在各位的公司的开发规则中是否有还有参照匈牙利命名法指定的准则吗?

解决方案 »

  1.   

    貌似很繁琐.....不喜欢,java的命名规范不就是要让人容易理解嘛?不过公司让用也没办法..哈哈,还没进公司呢,学习中...
      

  2.   

    大一学C++的时候用过,现在刚学java没多久,没使用过匈牙利命名法,竟然没有感觉到不适应。
      

  3.   

    不用,因为ide有提示,用ide的快捷键找起来也很方便
      

  4.   

    完全没有
    但是命名要有意义
    不能出现诸如a,b,a1,b1,这种(@#&%(*&@#(%&@#%&自己也看不懂的名字一般都是那个字段的英文或者拼音之类的
    诸如: 工程区分---projectdivision     详细画面---projectdetails
    之类的,虽然有点长,但是要让人一看就明白意思
    否则你定义a1到a10,过2个礼拜,回来一看,册那我估计你自己也不清楚自己写了什么了
    所以还是要有意义
      

  5.   

    其实不说繁不繁琐,我觉得命名这个也是一种思想。现在即使有了强大的IDE,好多问题还是因为我们变量命名的不规范造成的。匈牙利命名法也许是繁琐了,现在我也不用啦,但是匈牙利命名法教会我的怎样给变量命名的这样一种思想还是影响着我!
      

  6.   

    1. 如果十分有必要本人愿意使用。
    2. 我的公司在我们小组内没有使用。别的小组不知道。个人感觉Java这种静态强类型和语法检查的语言中,匈牙利命名法自然失去了他的意义。编译器就负责搞定了一切。所以Java中没有人使用这种命名方法。在Java中如果使用了这种命名方法
    1. 成本太高。 
    2. 收益甚微。
    3. 难以实施。
    Java程序员懒惰,Java语法检查强大。
      

  7.   

    我一般变量是采用第一个字母小写,其余的单词第一个字母大写。
    例如 String sName; 第一个字母s代表变量的类型,后面单词才代表变量的含义,再例如  int iAge等
      

  8.   

    java中确实很少见到使用这种命名方法的,太特别的字段名生成set,get方法时一些orm不认,例如ibatis对一些另类的方法名支持的就不好。
      

  9.   

    ps:使用匈牙利命名法,即便不完全实现在javascript中也是十分有意义的,我觉得更适合弱类型语言。
      

  10.   

    java自然要用java命名规范了,匈牙利命名法是MS的事情。
      

  11.   


    如它就对常用Windows对象名称就有比较明确的缩写规则。
      

  12.   

    我和楼主恰好相反,我以前用java,现在用c++,时不时的就用匈牙利命名法
      

  13.   

    不用。java规范的命名方法就很好了,引入匈牙利法反而更乱。
      

  14.   

    匈牙利法 我觉得挺好的 java引用也挺好的
      

  15.   


    不用,我用Pascal命名法,就是java命名规范那种,类是首字母要大写,变量首字母小写,其他字母大写那种
      

  16.   

    1. 弱类型编程语言一定用,例如 ECMAScript(JavaScript、ActionScript)、VBScript,另外像 VB 这样风格的语言一般也都使用匈牙利命名法,虽然 VB 不算弱类型编程语言。
    2. C/C++ 语系的语言典型的就算 Java 和 C# 了,因为现代开发工具的强大和语言本身的简洁(相对于C++),所以一般也都有自己的命名风格(一般以自带的类库的统一命名风格为参照基准),个人感觉与 C# 相比 Java 的命名风格的代码阅读起来要更舒服一些。
    3. 老一代编程语言例如 C++,其经典的开发环境与 Java 的 Eclipse 和 C# 的 Visual Studio 2005/2008 相比实在功能有限,所以一般借助于命名法来提高代码的可读性和可维护性。
      

  17.   

    似乎已经没人用了,起码我了解的公司,凡是用java作项目的,基本上都是采用现在开源的命名方式
      

  18.   

    谢谢,各位的讨论,我做一个阶段的小结:
    从java的命名规范来看,推广的是骆驼命名法。确实如sunyujia所说在很多框架中像struts2中对匈牙利命名法的成员变量会有无法找到其get和set方法。从这点来说,在Java中使用匈牙利命名法确实是不和谐的。
    这样的命名法应该是骆驼命名法吧,Pascal命名法是变量首字母需要大写。在borland的BCB中默认是这样的命名方法。其实我觉得匈牙利命名法比较起来比较优厚的地方是。对于变量的名称来说,赋予了更加明确的意义。其实我想讨论的是大家是否愿意给予变量更多明确的意义呢?
      

  19.   

    java里命名不区分全局变量和局部变量,有点不适应我已经习惯了dotnet的命名法
      

  20.   

    你所说的全局变量应该是实例域和静态域,实例域可以用 this 作前缀明确标识出它是“全局的”(虽然不加也可以),静态域一般按命名规范要所有字符都大写,更容易区分。
      

  21.   

    还是比较喜欢骆驼命名法,已经习惯了,现在连写C都习惯用骆驼命名法和一系列JAVA里的代码风格,尽管这个不是好习惯,但是改不过来了呵呵
      

  22.   

    用骆驼命名法,匈牙利不太适合java吧
      

  23.   

    使用sun推荐的命名法即可,不需要搞那么复杂
    JAVA资料太多?选中想收藏的文字(图片),右键选“收录到易载”,搞定!
      

  24.   

    Camel Casing VS Hungarian Convention