这是我参与「第四届青训营 」笔记创作活动的第8天
1. 代码质量
什么是优秀的代码:
- 明确的语义 代码即注释qvq
- 阅读代码时 不需要其他联想 没有泛指
- 满足边界条件
- 对于功能变更 只需小的改动
- 可以优雅的报错/自我恢复
- 能够应对安全攻击!BUG少!
代码可维护性原则:
- 统一的编码规范:命名规范/代码格式/注释规范
严禁使用拼音与英文混合的方式比如GetPingLunByName ×
- 稳定的工程结构:目录清晰/模块化/组件化/依赖可控/访问权限
- 优秀的方案实现:高内聚低耦合
圈复杂度概念:
也叫做条件复杂度=num(edges)-num(nodes)+2 或者 判定条件个数+1
正常圈复杂度不要超过15QAQ 1-10的代码通常是清晰的, 维护成本低。
2. 代码评审
- 避免不符合规范的代码入库
- 测试
CR 关注的点
代码规范
命名:是否定义了清晰准确的变量名/函数名/类名
描述:CR的描述是否准确对应到功能
风格:遵循统一的规范
文档:是否同时改动了文档
功能设计
设计:是否适用当前系统
功能:实现是否正确
简洁:是否简洁,如果复杂能否简单处理
测试:是否包含自动化测试
笑死hhh要用小CR,小改动就提交qvq
CR以后要澄清代码:补充注释或修复问题
一个不好的例子: )
3. 重构实践
技术债:本该用最佳方案,但妥协了,于是未来就惨了(
概念:对软件内部的一种调整,提高可理解性,降低修改成本
重构的方法:封装成员变量,方法提取,把公共代码抽离(类型一般化)
一些小例子:
超长函数,逻辑晦涩 -> 提取方法,新建小的子函数
逻辑嵌套 -> 提前返回
switch-case爆炸 -> 类型抽象 将不同条件做成不同的类
长调用链:Obj.a().b().c().d() 容易某个node判空 -> 隐藏中间人调用