变量的命名规范之学习与思考

        写程序,码代码,变量的名字。各位都是如何定义的呢?是有一个好的规范,还是被迫或习惯性地使用一个坏的规范(抑或随心所以没有规范)?

       各位肯定在腹诽了:博主你来说说啥叫好规范,啥叫不好的规范,如何界定好不好。各位莫急,先不忙下定论,让我们来看几个著名的命名法则。

       匈牙利命名法http://baike.baidu.com/view/419474.htm 来源百度百科百科原文很长,我们来看下重点和要点,本文中我会尽量避免大段复制百科原文的)

       匈牙利命名法的核心思想, 基本原则是:变量名=属性+类型+对象描述, 属性问题不大,类型部分重要的或者容易忽略的我稍微列下:计数 c(通常用cnt);浮点(有时也指文件) f;函数 fn。一个有趣的例子是 g_cch : g_ 是全局变量,c 和 ch 分别是计数类型和char类型,一起表示变量类型,这里忽略了对象描述,所以它表示一个对字符进行计数的全局变量。 匈牙利命名法大家都耳熟能详了,有人说它好,有人说它不好,有人只管用不管好不好。但是既然它这么著名,那么我们不如就用它来做标杆,看看市面上有没有更好的规范。 (额外说一句,匈牙利命名法出身证明上就盖这微软的戳,所以一般在windows环境下开发程序员用更合适)


      骆驼命名法 http://baike.baidu.com/view/1165629.htm

      骆驼命名法可以按照小骆驼大骆驼,有大有小全家都是骆驼这三种方式来使用。 smallCamelCase(小骆驼),BigCamelCase(大骆驼),  class CamelFamily { string daddyCamelName; string mamCamelName; string yesYourName; } (...混着用)。

     骆驼命名法的好处很多,和匈牙利法的区别是不强制要求添加属性和类型缩写。也有人会将m_,g_,这些属性用到骆驼命名法里面。各有所好吧。   匈牙利命名法最大的争议就是:规则中要求添加类型起什么用,在强类型语言中类型搞错根本编译不出来,

int iNum ;    string iOtherNum;    iOtherNum = iNum; 这个代码基本上不能编译成功。


    下划线命名法来源百度文档

    下划线命名法和骆驼命名法没有本质区别,视觉效果上,后者依靠大小写字母来区分多个单词而前者用下划线。


     Pascal命名法: http://baike.baidu.com/view/1276459.htm

     在delphi中,用pascal语言编程,这个编程语言的变量命名规范看起来就是刚才提到的大骆驼命名法,所以我知道一定有人在咬牙切齿地指责为什么把这种命名规范归到骆驼命名法里面去了。    

    常用命名法或许不止以上几种,实际上我们在工作中也未必绝对按照某种特定的方式工作,至少我本人就是将多种命名法混合起来使用了。现在来直面之前尖锐的问题,什么样的命名法是好的,什么样的命名法是不好的呢?之前四个命名法哪个更好,哪个不好呢?

    我个人的观点是,先考虑一下,为什么要有命名法呢?回想一下,我们写数学公式,做工程蓝图时,命名各种变量无非是x , y , z。要么就是直接用母语在合理的位置上写出这个这个变量是什么:周长,电阻,等等(甚至可能只有数值,没有名称)。恩,首先显而易见的原因是程序代码的分割不象数学公式那样抽象,大多数变量和函数背后都是有实实在在的客观事物的,所以它可以依靠生活中的或者计算机字典中的动名词来命名变量,并切实提高阅读效率。其次是高级语言毕竟不象电路图那样只需要人能看懂就好,它必须确保编译器能够“理解”,所以只有“值”,没有“名”,代码恐怕写不好。由此可见,变量名这个东西,不是有谁喜欢它,或者说程序中有变量名会使程序变得有多漂亮,那么这样一来,好与不好就很容易界定了: 在尽可能确保别人能看懂的情况下,越容易敲出来越好。这就是说,需要根据代码规模,编写方式,参与人员综合考虑。

    例如:如果你是在维护一个历史悠久的老程序,因为没有重载,里面的功能总是要在用不同类型来反复实现,那么变更名名称里有类型的缩写会看起来很整齐,并且每次都以iXXX,fXXX,lXXX这种格式反复列队,每个人写程序都会记得补齐相关代码,不至于忘记某个类型。 又例如:团队里有那么几个残疾儿童(不要笑,确有其事),他们输入下划线好费力,那么就不要选择下划线命名法了吧。


    至于我个人么,由于最初是从Pascal开始写程序的,所以我更倾向于Pascal命名法。不过一些细节我略有修改

   1  不过对于全局变量,成员变量,常量,我会加上属性前缀。前缀只用一个 ,优先顺序是:静态变量前缀 > 常量前缀> 全局/成员变量前缀 。

   2  现在我编程时,对于几个特定的对象我会加上一个字母前缀: I 表示接口 Interface;  D 表示可视化的窗口 Dialog ; C表示类;  小写的p表示 指针。

   3  result 表示函数返回值。不论它是什么类型。

   4  避免缩写,除了USA这种字典上都能查到的单词。

   5  临时变量用小写字母 t 。

   6  其他无明确业务含义的变量,在程序语义正确的前提下,依次使用 i j k  x y z 六个字母还不够用就得考虑程序是否写出问题了。

   7  格式话的代码尊重典范  main(int argc,char* argv[])

   8  指针和&靠向变量名 : string *Name 这是因为这样输入在键盘上比较流畅,这和我个人操作键盘习惯有关,不是每个人都一定是这样的。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值