文章目录
“Clean code is easy to understand, dirty code is not.”
任何傻瓜都能写出计算机能理解的代码,但优秀的程序员写出的是人能理解的代码。
在软件开发的漫长生命周期中,我们花费在阅读代码上的时间远多于编写代码的时间。如果代码像一团乱麻,维护它将成为一场噩梦。本文将带你探索什么是 Clean Code,识别痛点,并掌握重构之道。
本系列博客参考了以下Clean Code课程(强烈建议大家去学习一下):b站
什么是Clean Code?
Clean Code不仅仅是“能跑通”的代码,它更像是一篇写得很好的散文。
核心特征
我们可以通过以下思维导图来概括 Clean Code 的核心要素:
简而言之,Clean Code 应该让阅读者在阅读时感到愉悦,而不是困惑。 它应该像是一个精心设计的用户界面,引导你自然地理解其背后的逻辑。
关键痛点
我们在审查代码(Code Review)时,经常会遇到让人头秃的“坏味道”(Bad Smells)。以下是五个最常见的痛点:
1. Names (命名灾难)
变量、函数和类的命名模糊不清,迫使读者必须深入实现细节才能猜出它的用途。
- ❌ Bad (Python):
d = 12 # 经过的时间 def get_it(l): # l 是一个列表 list1 = [] for x in l: if x[0] == 4: list1.append(x) return list1 - ✅ Good (Python):
elapsed_time_in_days = 12 def get_flagged_cells(game_board): flagged_cells = [] for cell in game_board: if cell.is_flagged(): flagged_cells.append(cell) return flagged_cells
2. Structure & Comments (结构与注释)
代码格式混乱,或者充斥着无用的、误导性的注释。好的代码应该是自解释的,注释应该解释“为什么”而不是“是什么”。
- ❌ Bad (Java):
// Check if employee is eligible for full benefits if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) { // ... } - ✅ Good (Java):
if (employee.isEligibleForFullBenefits()) { // ... }
3. Functions (函数臃肿)
函数过长,做的事情太多(违反单一职责原则),参数列表像火车一样长。
- 痛点流程图:
4. Conditionals & Error Handling (条件嵌套与错误处理)
深不见底的 if-else 嵌套(箭头型代码),以及被吞掉的异常。
- ❌ Bad (Java - 嵌套地狱):
if (user != null) { if (user.isActive()) { if (user.hasPermission("ADMIN")) { deletePage(); } } } - ✅ Good (Java - 卫语句):
if (user == null || !user.isActive() || !user.hasPermission("ADMIN")) { return; } deletePage();
5. Classes & Data Structures (类与数据结构)
类不仅包含数据,还包含杂乱无章的逻辑,导致“上帝类”(God Class)的诞生。缺乏对数据结构(Data Structure)和对象(Object)的清晰界定。
6.💡 解决方案
如何解决上述痛点?我们需要引入规则、模式和方法论。
(1)Rules & Concepts (规则与概念)
- DRY (Don’t Repeat Yourself): 消除重复代码。
- KISS (Keep It Simple, Stupid): 保持简单,避免过度设计。
- Boy Scout Rule (童子军军规): 离开营地时,要比你来时更干净。每次提交代码时,都顺手清理一下之前的烂代码。
(2)Patterns & Principles (模式与原则)
最著名的当属 SOLID 原则:
| 原则 | 解释 |
|---|---|
| SRP | 单一职责原则 (Single Responsibility Principle) |
| OCP | 开闭原则 (Open/Closed Principle) |
| LSP | 里氏替换原则 (Liskov Substitution Principle) |
| ISP | 接口隔离原则 (Interface Segregation Principle) |
| DIP | 依赖倒置原则 (Dependency Inversion Principle) |
(3)Test-Driven Development (测试驱动开发)
TDD 不仅保证了代码的正确性,它还迫使你编写可测试的代码,而可测试的代码通常是解耦良好的 Clean Code。
如何编写整洁代码
1. Clean Code 不是一蹴而就的
不要指望第一遍就能写出完美的代码。写作也是先写草稿,再修改润色。代码也是如此。
流程: 先写出能工作的脏代码 -> 添加测试覆盖 -> 不断重构 (Refactor) -> 得到 Clean Code。

2. 持续重构的艺术
随着时间的推移,我们希望项目呈现如下趋势:

- 初期: 快速迭代,Dirty Code 可能较多。
- 持续重构: 随着功能增加,如果你坚持重构,Dirty Code 的比例会显著下降,Clean Code 成为主体。
- 放弃重构: 如果放任自流,Dirty Code 会呈指数级增长,最终导致项目无法维护(The Big Ball of Mud)。
编写 Clean Code 是一种职业素养,也是一种对队友的尊重。它需要刻意练习,需要我们在每次敲击键盘时都多思考一秒:“这行代码,我的同事明天能看懂吗?”
愿你的代码永远整洁,Bug 永远远离!
9103

被折叠的 条评论
为什么被折叠?



