美文网首页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