写在文前:大部分程序员都能写出计算机可以理解的代码,唯有优秀的程序员才能写出让人容易理解的代码
编码过程中,我们需要给变量,函数,参数,类,资源文件定义命名,合适的名字能给编码带来不少好处,比如易查找,见其名知其意等
以下就讲述一些合理命名的简单规则
名副其实
在查看变量,函数或者类起到什么作用的时候,根据它们的名字就应该知道个大概,包括为什么会存在,存在的作用,什么时候会被使用到。
举个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
短是短了,可是词不达意了。
更合适的方式可以是
- 换个词语
createDataById
- 通过参数来界定
generationDate(id)
- ..其他
给每个概念定义一个词
给每个抽象的概念定义一个词,并一直保持下去。
什么意思呢?我相信应该会有不少人在进行网络请求的时候会想,我是用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