Robert C. Martin在《Clean Code》中开篇即强调:“整洁的代码只做一件事”。这句话揭示了clean在编程中的本质——单点职责原则(SRP)的认知映射。
Donald Knuth提出“过早优化是万恶之源”,暗示代码应先保证正确性(clean),再优化性能
Kent Beck在Smalltalk中实践“测试驱动开发(TDD)”,将clean定义为“通过所有测试”
Robert Martin系统化“Clean Code”原则,提出“代码应如散文般可读”
现代IDE集成Clean Code插件,实时检测“循环复杂度”“函数长度”等指标
让我们看一个具体案例:
脏代码(Unclean Code):
def processOrder(order, user, items):
if user.age < 18:
return "Minor"
for item in items:
if item.stock < 1:
if item.stock < 1:
return "Out of stock"
if user.card.valid:
total = sum([item.price for item in items])
return "Success"
else:
return "Card Error"
Clean代码(Clean Code):
def is_minor(user):
return user.age < 18
def has_stock(item):
return item.stock > 0
def calculate_total(items):
return sum([item.price for item in items])
def process_order(order, user, items):
if is_minor(user):
raise ValueError("User is a minor")
if not all(map(has_stock, items)):
raise ValueError("Some items are out of stock")
total = calculate_total(items)
return charge_card(user, total)
关键区别在于:脏代码混合了多个逻辑层,而Clean代码将认知负担拆解为可独立验证的单元。这就是cleaning在编程中的真谛——把复杂系统分解为可理解的模块。
? Clean Code的5大黄金法则
- 命名即意图:变量名应回答“它是什么”,而非“它怎么工作”(如
user_age优于age)
- 函数≤20行:超过此限需拆解为更小的职责单元
- 错误即数据:用异常对象传递错误,而非字符串
- 避免副作用:函数只做一件事,不修改全局状态
- 测试即文档:单元测试应清晰展示预期行为
当程序员说“let’s clean this up”,他们真正想说的是:“请帮我们把认知负担从大脑卸载到代码中”——这正是cleaning从物理动作升华为认知工具的终极体现。