代码两三事
一直有点代码洁癖,看到凌乱的代码就忍不住想改,但是有时候怕生变故也只能忍着不改,那种心情。。今天想谈谈我心目中的好代码是什么样的,希望能对大家有点帮助。
从书本上读过,一个算法好坏,可以从正确性、可读性、健壮性、高效性和简洁性这5个方面来评价。算法也是通过代码实现的,那么算法的标准对于代码来讲也应该是通用的。精心设计的代码理应拥有以上特性。但是算法旨在描述一种逻辑思路,是一个完全独立的单元,所以他不是好代码的全部。而一个完整的代码不同,它还要关注可扩展性、可测试性。
下面就接着以上特性做出描述:
- 可读性
我是特意把这个放在第一条的,有人说代码首先是要给人家看的,这个我非常赞同。代码能否按照我们期望正确执行,很大程度上决定于人们对代码理解的程序。可读性主要有:- 逻辑清晰:清晰的思路就像与人对话,通过代码能理解你的想法,不会出现大的阅读障碍;
- 关键注释:在关键的代码加上注释,写清楚需要注意什么,为什么要这么写。
- 命名规范:这其实也算注释的一种。命名不规范是最让人头疼是一件事情,比如:词不达意,拼音英文混合双打,object1,a,b,x,y,z等。所以最好的情况是仔细斟酌命名,让人清楚的知道这个东东是干嘛的。
- 正确性和可测试性
代码不止是给人家看的,是要给机器执行并且需要满足预期的。我们要保证程序按照我们期望的那样执行,那就需要确保代码是可以通过测试被覆盖到的。可测试性是指,写完了代码要有单元测试(或者其他比如直接main方法)覆盖到各个分支,绝大多数bug都可以通过单元测试这类手段来规避的。可测试性的代码决定了程序的正确性。 - 健壮性
外界的一切输入都是不可信的,谁也无法保证进来数据都是正常,所以代码里需要对各种各样的情况做出恰当的处理。而不是出问题的时候怪别人搞事情。 - 高效性
代码的高效性是指用尽量少的时间去完成一件事情,比如想要获取一个地区数据,每次都从数据库里查询,实际上这类数据并不是经常发生变化,那我们就可以把它加载到内存进行读取了。高效性的点是很多的,无法一下道来,要多写多看多想。 - 简洁性
都是开车,手动挡得油离配合,各种加减档,而自动挡则是给油就走,对正常使用而言,我们自然愿意开自动挡。所以这个没有什么好说的。 - 可拓展性
好的代码必然是模块化的、高内聚低耦合的。改一处代码,只需要在修改的位置做出简单的测试即可。而不是改一行代码,要牵扯到很多改动,这个也是一个很大的话题。
从代码可能无法完全定位一个人的水平,但是可以了解一个人的基本素养。其实再往深了想依然有可以挖的,这里就不上升那种层次了。
这篇文章不错,大家可以看一下:
https://www.sdk.cn/news/4719