改善代码质量的编程规范¶
命名¶
取一个特别合适的名字是一件非常有挑战的事情:
即便是对母语是英语的程序员来说,也是如此
对于影响范围比较大的命名:
比如包名、接口、类名,我们一定要反复斟酌、推敲。 实在想不到好名字的时候,可以去 GitHub 上用相关的关键词联想搜索一下
经验:
1. 命名多长:
一个原则就是以能准确达意为目标
命名的时候,要换位思考,假设自己不熟悉这块代码,从代码阅读者的角度去考量命名是否足够直观
2. 利用上下文简化命名
函数参数也可以借助函数这个上下文来简化命名
3. 命名要可读、可搜索
可读:
不可读不方便沟通: plateaux, panacea
可读不知其意也没事: inkstone
可搜索:
方便使用 IDE 自动联想功能
统一规约是很重要:
大家都用 selectXXX 表示查询,你就不要用 queryXXX
大家都用 insertXXX 表示插入,你就不要用 addXXX
4. 类型命名
如接口的命名:
a. 接口加前缀 “I”,如 IUserService,对应的实现类命名为 UserService
b. 接口不加前缀,如 UserService,对应的实现类加后缀 Impl,如 UserServiceImpl
字串命令:
加前缀 str
注释¶
注释的目的就是让代码更容易看懂
注释本身有一定的维护成本,所以并非越多越好
代码风格¶
函数、类多大才合适:
函数的代码行数不要超过一屏幕的大小,比如 50 行 类的大小限制比较难确定
一行代码多长最合适:
最好不要超过 IDE 显示的宽度
善用空行分割单元块
对于比较长的函数,为了让逻辑更加清晰,可以使用空行来分割各个代码块。 在类内部,成员变量与函数之间、静态成员变量与普通成员变量之间、函数之间, 甚至成员变量之间,都可以通过添加空行的方式,让不同模块的代码之间的界限更加明确
编码技巧¶
将复杂的逻辑提炼拆分成函数和类
通过拆分成多个函数或将参数封装为对象的方式,来处理参数过多的情况
函数中不要使用参数来做代码执行逻辑的控制
函数设计要职责单一
移除过深的嵌套层次,方法包括:
去掉多余的 if 或 else 语句, 使用 continue、break、return 关键字提前退出嵌套, 调整执行顺序来减少嵌套,将部分嵌套逻辑抽象成函数
用字面常量取代魔法数
用解释性变量来解释复杂表达式,以此提高代码可读性