美文网首页iOS学习开发程序员
如何给变量起个好名字?

如何给变量起个好名字?

作者: 溪石iOS | 来源:发表于2017-07-08 15:45 被阅读311次

把标题改成《如何给你的娃起个好名字》,会不会大大提高点击点击量呀。
本篇将从三方面来说明变量名的重要性,及取名的方法:

  1. 为什么 current 是个坏名字?
  2. 衡量好名字的标准
  3. 立即可用的命名方法

1. 为什么 current 是个坏名字?

current 常常会纳入程序员的法眼,初看 current 表意还挺明确,比x,i,j,c要明确多了?仔细斟酌后,发现 current 是很糟糕的名字,表示 “当前” 什么,“当前人员”还是“当前日期”,还是“当前计算和”?current 没有告诉你,每次都需要看很多代码才能最终确定,说不定还得配上一大段注释。
下图是github上命名为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 吧。

现在,你应该对变量名的重要性,取名的方法有了一定的认识了吧,正如《计算机程序的构造和解释》中的名言:

“代码是写给人看的,不是写给机器看的,只是顺便计算机可以执行而已”

起好变量名,是成为优秀程序员的第一步,也是最容易入手的一步。

相关文章

网友评论

    本文标题:如何给变量起个好名字?

    本文链接:https://www.haomeiwen.com/subject/qaawcxtx.html