# 简介篇
*[顺便调了一下格式]: 其实调完样式还是有点乱。
声明
本文 非本人原创,转载自:代码洁癖系列(一):什么是整洁代码 (opens new window),内容稍有改动,顺便调了一下格式,使符合本站风格。
作为一名重度 代码洁癖[1] 患者,我最大的愿望就是世界和平……对不起,拿错剧本了,最大的愿望就是将对代码的洁癖传播给每一个人,净化所有的代码。这是一个宏大的愿望,但我会一直努力净化我所看到的每一行代码,并且希望能影响更多的人,让大家都写出整洁的代码。
在阅读本文之前,想先提两个问题:
- 你是程序员吗?
- 你想成为更好的程序员吗?
如果上面两个回答都是肯定的,那请你继续读下去,否则就可以直接关闭网页了。
# 什么是整洁代码?
相信有过一定工作经验的程序员都读过别人的代码,也一定看到过槽糕的代码,看到那些糟糕的代码时你是不是在想:这写的什么垃圾东西,读懂这段代码所花费的时间我都能把这个功能再实现一遍了。还有另一种情况:引用别人的代码时,为了能按时完成,不得不去适应别人的代码风格,跟着制造混乱。当混乱越来越多时,整个团队的生产力也越来越低,直到最后不得不把所有代码重新整理一遍,而这个工作里可想而知。
上面说的都是糟糕的代码所带来的影响。那么什么是整洁的代码呢?在我看来可以从两个方面定义整洁代码:
外在美
外观看起来优雅美观的代码会使人心情愉悦。其中主要体现在:代码所在的位置是否恰当,代码里是否有适当的注释,适当的缩进和空行以及没有重复代码等等。
内在美
外在美只是“看起来”使人心情愉悦,如果缺乏内在美,那么当别人真正开始读的时候,刚才愉悦的心情会在一瞬间烟消云散。而内在美则体现在:尽量少的 API,代码之间的尽量少的依赖,干净利落的抽象和直截了当的控制语句等。
在理解了什么是整洁代码后,希望我们在写每一行代码之前都要思考一下,这行代码是否足够整洁,是否让人看了心情愉悦。
# 如何写出整洁的代码?
有意义的命名
什么是无意义的命名?如果代码中所有的变量名,函数名都是 abcd 之类的,相信你在看到这样一段代码的第一眼就已经失去了读下去的欲望了。也许有人觉得这太极端了,认为不会有人这样写代码。那么我们在考虑一下,我为一个变量命名为 name,那么在没有前后语境的情况下,你能想象出这个变量是用来做什么的吗?是一个人的 name 还是一个物品的 name,是 firstName 还是 lastName?所以,有意义的命名对代码阅读是非常重要的。
如何定义类和函数?
如何定义相信大家都会,毕竟这是最基本的操作,那么怎么才能算是整洁的类和函数呢?
要不要写注释?
大多数程序员都觉得写注释(文档)很麻烦,觉得自己的工作就是实现功能,自己写的代码自己能看懂就行。事实上真的是这样吗,他们真的能看懂自己三个月前写的代码吗?
另一种程序员知道要写注释,但是他们写的注释都是诸如:“这是一个方法”、“这是一个循环”……这样的注释写出来真的有意义吗?
如何排版?
这个属于外在美,第一印象很重要,第一眼看上去很好,才会继续看下去不是吗。
错误处理
代码运行时的错误如何处理吗?全部抛出去,交个用户处理?全部 catch 住,隐藏起来不处理?这两种程序员相信都会被老板当成错误处理掉吧。
合格的单元测试
什么样的单元测试才算合格,单元测试对代码的覆盖率要达到多少?
迭代
胖子从来都不是一口吃成的,怎么才能让你的代码越来越饱满,系统越来越稳定呢?唯有不断迭代。
# 结语
上面这些问题,我将在后面的文章中挨个解读。希望你读完之后,也能化身为整洁代码的守护者。
# 附录 A: 代码洁癖系列
TIP
这部分内容非原文内容,是我附加的。
- 代码洁癖系列(一):什么是整洁代码 (opens new window)
- 代码洁癖系列(二):命名的艺术 (opens new window)
- 代码洁癖系列(三):整洁的类和函数 (opens new window)
- 代码洁癖系列(四):可忽略的注释 (opens new window)
- 代码洁癖系列(五):外在的格式美 (opens new window)
- 代码洁癖系列(六):处理错误 (opens new window)
- 代码洁癖系列(七):单元测试的地位 (opens new window)
- 代码洁癖系列(八):迭代的原则 (opens new window)
代码洁癖: 指对代码整洁度要求较高,这个词一般活跃在程序猿中。 ↩︎
工具篇 →