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