博客 > 项目管理
# 整洁代码经典实例(Clean Code Cookbook) - Maximiliano Contieri ## 关注声明的行为,而不是执行的过程 ### 避免过程式代码中的空行 - ❌避免通过空行分隔过程式代码块,在每个代码块上编写注释 - ✅将代码块切分为函数,以函数名作为功能声明,再以无空行的方式调用这些函数 ### 使用有意义的实体名称 - ✅在复杂字符串(如正则表达式)中使用有意义的命名字符串片段进行拼接❌而非一股脑写出 - ✅立即数或者不平凡的设计决策,最好使用命名常量或有意义函数名,❌而非仅依赖注释 - ❌避免使用`input`/`output`/`data`/`result(res)`/`ret`/`flag`等无行为指示的名称 ### 面向对象 - ✅暴露对象的行为(方法)而非数据和结构 - ✅确保对象的本质定义永恒不变(从构造后到析构前行为逻辑统一一致) - ✅确保对象的职责明确,❌不负责处理多余行为,也不依赖其他对象来完成应该仅由其自身完成的行为 - ❌避免缺失抽象带来的重复代码段 ### 有意义的过程控制 - ✅报错中可以添加对特定规则的强调声明,❌而非只展示错误本身(如`index out of range`→`index should in [0, maxn]`) - ✅使用对象式或函数式迭代或生成器,❌而非下标循环(基于下标数字的处理除外) - ✅对于复杂布尔判断,分发责任(使用多态方法/使用责任链)或使用状态管理机制,❌而非无限制的if/case - ✅对于参数有交集的不同函数,其传参顺序应符合一致规律;对于参数过多的函数,将相关参数分组为对象以简化参数数量 - ✅使用版本历史管理代码变更,❌而非原地注释代码 ## 减少歧义和错义 - ❌尽可能避免副作用 - ❌尽可能避免双重否定(如`!disabled) - ✅对于可枚举数据,在支持的语言中定义枚举值或常量,❌而非字符串 ## 避免过度设计和过早优化 - ✅专注于已知或已能预测的实际任务本身,适度放弃可维护性(如一次性编程)和可扩展性(如原型验证) - ❌避免只有一个子类的类,和只有一种实现的接口(依赖反转除外) - ❌不要同时开发新功能和重构旧功能,✅重构就是重构 ## 快速失败原则 - ✅开启所有值得验证的前提条件、后置条件的断言