编程五分钟,命名两小时
程序员写代码其实和作家写小说很像。小说要想写得好,除了要有跌宕起伏的情节,还要有让人记忆深刻的角色名字,比如“令狐冲”“闷油瓶”。同样,程序员写代码,也要起个好名字。甚至有人说,程序设计里最难的两件事,一件是保证缓存一致性,另一件就是命名。我们给宠物、给玩具起个名字都需要绞尽脑汁、千挑万选,而程序员几乎每天都在和命名打交道,可想有多艰难。
程序员为其命名最多的是变量。首先变量是数据的容器,有自己的类型。比如有一个整数用来表示年龄,可以写成int a=21,但如果写成int age=21的话会更容易让人理解。其次是函数的命名。函数是用于实现某个功能的几行代码的组合。我们可以为一个用来处理数据的函数起 “process_data”的名字,但是同事看到这段代码可能会问:“process…what data?”这时将其改成“process_orders_data”会更具体一些。
那么,是什么造成了程序员的“命名困难症”呢?作者总结了一下,主要有下面几个原因:
1.英语差
代码都是用英语写的,如果程序员的英语词汇量低,随时备一本词典就好了。然而,有些东西是词典上查不到的。比如iOS命名函数的时候,如果一个动作还没有发生,就用“will”,比如“viewWillAppear”,表示一个控件将要显示出来;一个动作已经发生,就用“did”,比如“buttonDidClicked”,表示用户点击了按钮。苹果的高明之处在于,不懂代码但懂英语的人,看到这些函数名也能猜个八九不离十。如果英语不地道,命名很难达到出神入化的境界。
2.读书少“读书少”准确地说是读代码少。现在有很多命名非常规范的开源代码,它们甚至形成了自己的风格。比较著名的有匈牙利命名法,它要求命名变量的时候采用“作用域+类型+名字”的规范。比如一个作为成员变量的指针要被命名成“m_pAddr”,其中“m”是“member”的简写,表示“成员”,p是指针类型的简写,最后的“Addr”才是变量名。还有一种同样常用的命名法——驼峰命名法:除第一个单词外,将其他单词的首字母大写连接起来,看起来像一个一个的驼峰。比如一个函数是 process_data_for_orders,用驼峰命名法就是“processDataForOrders”。
3.不是所有的程序员都是架构师
命名其实是个技术活。如果程序员熟悉各种设计模式、编程规范,命名的时候只需要明确它扮演的角色,一般不会出错。比如MVC模式里的“V”是显示层;在iOS里所有控件的名字里都有“UI”这个前缀,比如UITableView是一个列表,UITextView用来输入文字,等等。
在命名的时候,什么是Manager、Controller,什么又是Interface,需要程序员通盘考虑。如果命名不当,后期维护的成本是很高的。