读《代码整洁之道》一些总结

怎么写好函数?

  • 函数应该做一件事,只做一件事,做好一件事。
  • 方法:尽可能小,不断抽象,分离结构,抽象层级足够少,最好一个。
  • 面向对象设计五个基本原则(SOLID)之一。这些原则是:单一职责原则、开闭原则、
    接口隔离原则、里氏替换原则和依赖倒置原则。
  • 函数名通俗易懂,风格统一。
  • 参数越少越好。
  • 做什么事和检查状态应该分离,分离指令和询问。

代码风格

  • 根据逻辑,距离分隔。
  • 相关函数位置最好在一起,调用者在被调用者上,增强可读性。

数据抽象和封装

  • 找到最原始的特性,封装,对外隐藏具体实现。

错误处理

  • 处理错误时使用异常,不使用返回码。
  • 打包第三方API,对第三方API也可以封装到适合自己使用。

单元测试

  • 测试随代码演进,和生产代码一样重要。
  • 测试代码要清晰整洁,可读性好,便于直达目的。
  • 原则:FIRST,快速独立可重复自足验证。

  • 单一权责,类根据职责要足够小
  • 内聚,保持内聚能得到更多短小的类

不断迭代

  • 通过所有测试
  • 不可重复代码,保证表达力
  • 尽可能减少类,方法数量

味道与启发(怎么样的代码是好代码)

  • 注释
    • 不含有不恰当的信息
    • 没有废弃的注释
    • 注释不冗余
    • 要写注释就好好写
    • 没有注释掉的代码
  • 环境
    • 一步构建开发,生产环境
    • 一步运行所有测试
  • 函数
    • 参数尽量少
    • 没有死函数
  • 一般问题
    • 没有重复(代码、功能、模块)
    • 低层级概念在派生类,高层级概念在基类,派生类对基类不可见
    • 消除死代码
    • 命名前后一致
    • 逻辑依赖改为物理依赖(依赖者模块不应该对被依赖模块有假定)
    • 用命名常量代替魔术数(不能描述自己的符号)
    • 只做一件事的函数
    • 使用时序耦合,使用必要的函数参数暴露时序性。
    • 封装边界条件(next_page = page+1)
    • 避免传递浏览(避免 a.get_b().get_c())

NOTE: 整体来说,看完这本书还是发现有很多和自己编程时遇到的问题相通的地方。原则很多,只能一步步逼近理想的情况。追求整洁完美的代码是一件需要持之以恒的事情。

请我喝杯咖啡吧~