把标题改成《如何给你的娃起个好名字》,会不会大大提高点击点击量呀。
本篇将从三方面来说明变量名的重要性,及取名的方法:
- 为什么 current 是个坏名字?
- 衡量好名字的标准
- 立即可用的命名方法
1. 为什么 current 是个坏名字?
current 常常会纳入程序员的法眼,初看 current 表意还挺明确,比x,i,j,c要明确多了?仔细斟酌后,发现 current 是很糟糕的名字,表示 “当前” 什么,“当前人员”还是“当前日期”,还是“当前计算和”?current 没有告诉你,每次都需要看很多代码才能最终确定,说不定还得配上一大段注释。
下图是github上命名为current的变量,能说出该变量保存的是什么吗?
准确来说,变量名就是变量,需要慎重对待。给自己家的宠物狗取名小黄、小白,比取名“狗1,狗2,大狗,小狗”,要明确的多,就是因为带上了小狗的特征,变量名也应该如此:
不需要解释的才是好名字
2. 衡量好名字的标准
看一个变量名好不好,要看是否准确地描述了用户的需求,如果用户需求是 employe(雇员),就不应该使用 person(人)。
还有个很常见的变量,我们?;岚炎刺昙敲?bitFlag(比特标记),有经验的程序员可能会猜测出该变量的功能,甚至是占用内存大小,但这仅仅说明 bitFlag 是“怎么做的”,而关于这个标记是“做什么的”,我们一无所知,所以不如取名为 wifiReady,这样可以马上知道该标记是表示“wifi网络是否准备好”;同样的理由,把求和结果放在 sum中 就比 value 好。
所以,仔细看看需求文档,查查权威字典,确认找到的单词能准确表达需求描述的东西。
好变量名的原则就是:是什么就叫什么!
3. 立即可用的命名方法
方法0. 用自然语言描述变量,然后找合适单词组合
先用自然句子描述变量的作用:“一个用于显示地名的文字标签”;
然后去掉句子中的数量词、动词,将名词串联起来:
PlaceNameLabel
再如:
一个显示中国城市名称的列表:CityNameOfChinaTable
显示世界某国城市名称列表:CityNameOfCountryTable
方法1. 把限定词放在最后
一个项目中,为避免同时出现 totalRevenue 和 revenueTotal ,把 total 这样表示变量属性的词,都统一放在名字的最后,这样我们在程序中可以避免大量的歧义:revenueTotal(总收入),expenseTotal(总支出),expenseAverage(平均支出)等等都是意思表达很明确的词,而且表现出统一的规律,反过来就有点绕了: totalExpense,averageExpense。
限定词表
单词 | 含义 |
---|---|
total | 总额 |
sum | 求和 |
average | 平均值 |
max | 平均值 |
min | 平均值 |
record | 记录 |
string | 字符串 |
pointer | 指针 |
方法2:准确使用成对的词
对照下表,不需要再思考如何找到对应的单词了。
成对出现的词表
单词对 | 含义 |
---|---|
begin / end | 开始 / 结束 |
first / last | 第一个 / 最后一个 |
locked / unlocked | 加锁 / 解锁 |
min / max | 最小 / 最大 |
previous / next | 前一个 / 后一个 |
old / new | 旧的 / 新的 |
opened / closed | 打开 / 关闭 |
visible / invisible | 可见的 / 不可见 |
source / target | 来源 / 目标 |
source / destination | 出发处 / 目的地 |
up / down | 上 / 下 |
expand / fold | 展开 / 折叠 |
login / logout | 登录 / 登出 |
方法3. 区分子系统
实际开发中,对于一个对象,比如同样的 employe ,获取途径往往不同,从网络接口拿到的 employe 的工资叫 revenue ,而界面上用的却称为 pay,相同对象的数据在不同子系统里却有不同的名称,大部分情况我们不能要求服务端做对应修改,为了避免这种混乱,可以分别将服务端的雇员命名为 ServerEmploye,将界面使用的 UIEmploye。
方法4. 不要混用近似单词
我曾经参与开发的一个APP有个首页模块,主界面控制器命名为 HomeViewController,结果开发用户设置界面的兄弟将他的控制器命名为 UserHomeViewController,而在写tableView单元格的时候,又命名为 CustomerHomeCell,可怕的是,有些开发人员还把其它界面的主入口也命名为 home,比如BookReaderHomeViewController,你们可以想象一下,当我要找首页类,输入 home, 看到查找结果时的心情。
所以花点时间,与小组开发人员约定,对于用户对象,在 user 和 customer 选一个就好;搜一下代码库,发现大家表示颜色,都用 color, 就不要使用 colour。
还要注意单词的拼写错误,从数据库查出来的视频叫做 vedio ,就不要全部都以误传误的全部都使用 vedio,这样会导致因为一个单词,开发小组辩论20分钟,还有几个坚持 vedio 是正确拼写的窘境;如果实在不知道正确拼写,就用 movie 吧。
现在,你应该对变量名的重要性,取名的方法有了一定的认识了吧,正如《计算机程序的构造和解释》中的名言:
“代码是写给人看的,不是写给机器看的,只是顺便计算机可以执行而已”
起好变量名,是成为优秀程序员的第一步,也是最容易入手的一步。