名称: clean-code 描述: 用于编写、审查或重构代码以提高可维护性和可读性。在代码审查、命名讨论、函数设计、错误处理和测试编写时触发。基于Robert C. Martin的Clean Code手册,并带有现代修正。
Robert C. Martin(Uncle Bob)清洁代码最佳实践
基于Robert C. Martin的《Clean Code: A Handbook of Agile Software Craftsmanship》的全面软件工艺指南,更新了现代修正,其中2008年的原始建议已被取代。包含10个类别中的48条规则,按影响优先级排序,以指导代码审查、重构决策和新开发。示例主要使用Java,但原则是语言无关的。
何时应用
在以下情况下参考这些指南:
- 编写新函数、类或模块
- 命名变量、函数、类或文件
- 审查代码的可维护性问题
- 重构现有代码以提高清晰度
- 编写或改进单元测试
- 包装第三方依赖
按优先级排序的规则类别
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | 有意义的名字 | 关键 | name- |
| 2 | 函数 | 关键 | func- |
| 3 | 注释 | 高 | cmt- |
| 4 | 格式化 | 高 | fmt- |
| 5 | 错误处理 | 高 | err- |
| 6 | 对象和数据结构 | 中高 | obj- |
| 7 | 边界 | 中高 | bound- |
| 8 | 类和系统 | 中高 | class- |
| 9 | 单元测试 | 中 | test- |
| 10 | 涌现和简单设计 | 中 | emerge- |
快速参考
1. 有意义的名字(关键)
name-intention-revealing- 使用揭示意图的名字name-avoid-disinformation- 避免误导性名字name-meaningful-distinctions- 做出有意义的区分name-pronounceable- 使用可发音的名字name-searchable- 使用可搜索的名字name-avoid-encodings- 避免在名字中使用编码name-class-noun- 对类名使用名词短语name-method-verb- 对方法名使用动词短语
2. 函数(关键)
func-small- 保持函数小func-one-thing- 函数应该做一件事func-abstraction-level- 保持一个抽象级别func-minimize-arguments- 最小化函数参数func-no-side-effects- 避免副作用func-command-query-separation- 分离命令和查询func-dry- 不要重复自己
3. 注释(高)
cmt-express-in-code- 在代码中表达,而不是在注释中cmt-explain-intent- 使用注释来解释意图cmt-avoid-redundant- 避免冗余注释cmt-avoid-commented-out-code- 删除注释掉的代码cmt-warning-consequences- 使用警告注释来指出后果
4. 格式化(高)
fmt-vertical-formatting- 使用垂直格式化以提高可读性fmt-horizontal-alignment- 避免水平对齐fmt-team-rules- 遵循团队格式化规则fmt-indentation- 尊重缩进规则
5. 错误处理(高)
err-use-exceptions- 将错误处理与正常路径分离err-write-try-catch-first- 首先编写try-catch-finallyerr-provide-context- 提供异常上下文err-define-by-caller-needs- 根据调用者需求定义异常err-avoid-null- 避免返回和传递null
6. 对象和数据结构(中高)
obj-data-abstraction- 将数据隐藏在抽象后面obj-data-object-asymmetry- 理解数据/对象反对称性obj-law-of-demeter- 遵循德米特法则obj-avoid-hybrids- 避免混合数据-对象结构obj-dto- 使用DTO进行数据传输
7. 边界(中高)
bound-wrap-third-party- 包装第三方APIbound-learning-tests- 为第三方代码编写学习测试
8. 类和系统(中高)
class-small- 保持类小class-cohesion- 保持类内聚class-organize-for-change- 组织类以适应变化class-isolate-from-change- 隔离类免受变化影响class-separate-concerns- 分离构造和使用
9. 单元测试(中)
test-first-law- 遵循TDD的三个法则test-keep-clean- 保持测试清洁test-one-assert- 每个测试一个概念test-first-principles- 遵循FIRST原则test-build-operate-check- 使用构建-操作-检查模式
10. 涌现和简单设计(中)
emerge-simple-design- 遵循简单设计的四个规则emerge-expressiveness- 最大化表达力
如何使用
阅读各个参考文件以获取详细解释和代码示例:
参考文件
| 文件 | 描述 |
|---|---|
| references/_sections.md | 类别定义和排序 |
| assets/templates/_template.md | 新规则的模板 |
| metadata.json | 版本和参考信息 |