JavaEE基础知识学习-----代码整洁之道学习笔记

一、代码整洁之道学习笔记

大约在1951年的日本出现了一种5s原则体系,5s的精髓就是精益

  • 整理;搞清事物的所在,通过准确恰当的命名十分重要。
  • 整顿;A place for everything and everything in its plase(物皆有其位,而后物尽归其位)。
  • 清除;清理工作地的拉线,对于那种四处遗弃的带注释的打代码,应该除之而后快。
  • 清洁;及标准化,在开发代码中使用一贯的代码风格和实践手段。
  • 身美;或称纪律,在实践中贯彻规程,并时时体现在个人的工作中,并要乐于改进。

1.1.什么是整洁代码

我喜欢优雅和高效的代码,代码逻辑应当直截了当,叫缺陷难以隐藏,尽量减少依赖关系,使之便于维护,依据某种分层战略完善错误处理代码,性能调至最优,省得引诱别人做没规矩的优化,搞出一堆混乱来,整洁代码之做好了一件事。–Bjarne Stroustrup

1.能通过所有的测试;2.没有重复代码;3.体现系统中的全部设计理念;4.包括尽量少的实体,比如类、方法、函数等,–Michael

我的理解:在Java开发中应该坚持单一简单的原则,一个类,一个方法都应该只做一件事,如果,一个方法还能在提取出另外一个方法,就说明违反了单一职责,优雅的代码就是不仅自己看着舒服,也能让别人看着舒服,能很轻松的看懂代码的业务逻辑,这里涉及到有意义的命名,下面也会总结到。

1.2.有意义的命名

在开发中,我们随处可见的都是名字,我们也时时给变量、函数、方法、参数、类、包等命名,整洁代码的第一点就是要有意义的命名。

名副其实

名副其实就是说你个方法是做什么的,参数是什么,就应该名副其实的命名,如果你的方法是删除一条记录,你就不能用get作为方法的开始,参数名、方法名应该是能够告诉阅读者,它为什么存在,它做了什么事,应该怎么用。

1
int d; // 消逝的时间,以日计
1
int elapsedTimeInDays;

上述代码中,这个d并不能代表消逝的时间,以日计这个注释所代表的含义,我们应该选择指明了计量对象和计量单位的命名,再看elapsedTimeInDays就可以体现出注释的含义了。

1
2
3
4
5
6
7
8
9
public List<int[]> getThem() {
List<int[]> list1 = new ArrayList<int[]>();
for(int[] x : theList){
if(x[0] == 4){
list1.add(x);
}
}
return list1;
}

上述代码中,当我们要取理解这段代码干了什么的时候,我们都会想问几个问题

  • theList是什么东西?
  • theList的零下标的值有什么含义吗?
  • 值等于4的意义是什么?
  • 返回的list1又代表什么?又怎么使用?

避免误导

编写代码的时候应该避免留下掩藏代码本意的错误线索,误导性最可怕的就是将大写字母O作为变量名。

1
2
3
4
5
6
int a = 1;
if(O = 0){
a = 0l;
}else{
a = O1;
}

虽然,上述代码一般不会这么写,但是,在这里,我们真的很难分清大写字母O、数字0、大写字母I和数字1等情况。

做有意义的区分

我们在编写代码的时候经常会遇见命名重复的情况,这个时候,可能你会为了满足编译器不报错而随意更改其中的一个名称,有时候你会很简单的在后面加一个1或者2等等,这样的名称同样会引起误导,也没有提供正确的信息,

1
2
3
4
5
public void copyChars(char[] a1, char[] a2){
for(int i = 0; i < a1.length; i++){
a2[i] = a1[i];
}
}

上面的参数名称就表达不出任何意义的区分,也不能很清楚的明白是将谁复制给谁,如果,我们换一个命名,如下,应该就可以清楚了吧。

1
2
3
4
5
public void copyChars(char[] source, char[] target){
for(int i = 0; i < source.length; i++){
target[i] = source[i];
}
}

使用读的出来的名称

在开发的时候,我们经常会与别人讨论代码,所以不要自己造词,增加沟通成本。

使用可以搜索的名称

单字母和单数字的命名很难在项目中找到自己想要找到的,无论是为了快速定位,还是为了后期如果需要更改可以一键查找和替换,我们都应该在开始命名的时候,使用可搜索的名称

避免使用编码

编码已经太多,把类型编进名称里面,白白增加了解码的负担,带编码的名称也不利于发音,容易打错。

避免思维映射

不应当让读者在脑中把你代码的名称翻译成他们熟悉的名称。

类名

类名和对象名应该是名词和名词短语,不应该是动词。

方法名

方法名应该是动词或者动词短语,依靠JavaBean并在前面添加get、delete等前缀。

别扮可爱

不要想一个小学生一样,搞一个非主流的名称,这种做法在代码中只能是俗。

每个概念对应一个词

给每一个抽象概念选中一个词,并且一以贯之。

避免使用双关语

避免将同一个单词用于不同的目的,同一个术语

曹辰 wechat
欢迎关注微信公共号 summerhins
不经常抽风性更新 | 挨踢民工 | 爱数码产品 | 爱黑莓 | 爱苹果 | 美剧痴迷者 | 音乐重度爱好者 | 高清下载控 | 不折腾不舒服 | 纠结 | 失眠 | EQ=0
真诚赞赏,手留余香
0%