代码重构-有意义的命名

写在文前:大部分程序员都能写出计算机可以理解的代码,唯有优秀的程序员才能写出让人容易理解的代码

编码过程中,我们需要给变量,函数,参数,类,资源文件定义命名,合适的名字能给编码带来不少好处,比如易查找,见其名知其意等

以下就讲述一些合理命名的简单规则

名副其实

在查看变量,函数或者类起到什么作用的时候,根据它们的名字就应该知道个大概,包括为什么会存在,存在的作用,什么时候会被使用到。

举个Android下最简单的例子,比如 AddressAdapter这个类,从名字中你就能得知这个是一个关于地址的适配器,会在展示地址列表的时候被调用。

既然说到名副其实,还可以提一提魔术数.因为魔术数是典型的名不符实。
何为魔术数?

魔术数 :是程式设计中所谓的直接写在程式码里的具体数值(如“10”“123”等以数字直接写出的值)。虽然程式作者写的时候自己能了解数值的意义,但对其他程式员而言,甚至制作者本人经过一段时间后,会难以了解这个数值的用途,只能苦笑讽刺“这个数值的意义虽然不懂,不过至少程式会动,真是个魔术般的数字”而得名。

比如:

for(int i=0;i<10;i++){
    if(i==4){
        //todo 
    }
}

上述for循环中,i==4中的这个 4就是魔术数,从这段代码来看,我们只知道i==4的时候,会有特殊的事情触发,但我们不知道4这个数字有什么意义。

for(int i=0;i<10;i++){
    if(isLogin(i)){
        //todo 
    }
}

Bolean isLogin(int i){
    return i==4;
}

如果改成这样的代码,我们便能轻易的知道当 i==4的时候表示已经登录,这样的话对if语句中所要执行的逻辑也能知晓个大概。

避免误导

你取得名字应该有特定的意义,同时还要注意不要与代语音中那些理所当然的术语所冲突。

举个简单的列子,比如有一个书的数据集(books),而有的人习惯命名为bookLists,当然这个名字也很合理,只不过这时一定要注意,承载这个数据集的容器究竟是什么。 如果容器是一个Map,那么bookLists这个名字就会误导别人,这时取名 bookMap 或者干脆就取 books 会更好.

同样的情况还会出现在其他时候,总的来说,不要让除你之外的其他人在看到某个名字的时候,会想到很多种解释。

做有意义的区分

当业务逻辑越来越复杂的时候,你就不得不往上堆砌更多的代码和变量。这时你可能就需要较劲脑汁的想变量名,尤其是那种含义类似,但又必须又多个变量的情况。

就比如数据集 mDatas 这个名字虽然意义不够明显,但是在只有一个数据集的情况下却也是十分容易理解。如果这时又必须一个变量来表示一个新的数据集,可能为了方便顺手就是 CTRL+D 复制加个2,一个mDatas2就出来了。

当然就算 mDatas mDatas2对我等程序员也就吹灰之力,况且数据集一般也不对多到mDatas3 4 5 这个样子。

只不过这种命名方式放到view中可能就不太一样的,业务逻辑一复杂,出个个10个8个view还是有可能的。

所以为了更好的辨认,可以按照变量的具体作用来划分,就比如上述的例子,可以简单的划分为 topDatas,bottomDatas,也可以是bookDatas,subBookDatas等。

百度一下,你就知道(拼音型命名/强行缩写型命名)

对于一些初入行的,尤其是那些英语水平一般的童鞋。有的时候找不到一个合适的英文组合来命名,这个时候可能为了好记(相比之下),就采取的怕拼音的方式命名。拼音命名这可能跟我们的拼音刚好是英文字母有关系吧!

当然这肯定是不推荐的,就算是国内,绝大部分的程序员还是习惯英文命名,shenchengriqi 这么一个命名估计大部分程序员都会瞬间爆炸吧。
况且现在这个社会,翻译工具这么发达,generationDate这种直译的单词都更容易理解。

另外还有一些人命名时习惯性的缩写,比如生成日期根据用户ID,直译的话 generationDateByUserId 有的人一看太长了,不美观,于是就缩写成genDataById 短是短了,可是词不达意了。

更合适的方式可以是

  1. 换个词语 createDataById
  2. 通过参数来界定 generationDate(id)
  3. ..其他

给每个概念定义一个词

给每个抽象的概念定义一个词,并一直保持下去。

什么意思呢?我相信应该会有不少人在进行网络请求的时候会想,我是用requestDatas呢?还是fetchDatas呢?亦或者干脆getDatas得了,甚至可能会因为request看着太熟悉了,想着换个词语来表达获取数据的意思。

一个概念对应着多个词语,这种做法显得有些可笑。不管是你自己还是与你共同协作的人都会因为这种情况而做无用功。

从现在开始,你就应该学会给每个概念定义一个显而已懂的词语。

最后给出我自己在编码过程中的一些命名规范

Android 下资源文件的命名规范

drawable下:

图标:icon_xxx
背景:bg_xxx
图片:img_xxx
选择器:select_xxx

layout下:

activity_xxx
frag_xxx
dialog_xxx
view_xxx

颜色:

颜色渐变
color_white_1   #fff
color_white_2   #333
color_white_3   #666
color_white_4   #999

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

推荐阅读更多精彩内容