如何给变量起个好名字?


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

  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 吧。

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

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

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

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容