代码整洁之道 学习笔记

代码整洁之道 学习笔记

前言

阅读背景:
代码整洁之道是我在蚂蚁集团实习时(后悔最后没留那里正式入职hh,相信命运的安排吧!),组长推荐给我阅读的。我看网上不少工作了几年的大佬都会推荐这本书给自己的新人读。代码作为我们程序员最直观的工作体现,我认为写的整洁、可读性强,且易于维护还是很重要的。

推荐理由:
一个人在知晓了最好的实践方法时,会比不知晓的情况下去下意识的模仿这些最佳实践而写出的代码好的多。另外这本书所写的也不要认为都是对的,要去思考,软件工程没有永远的银弹。这本书中的一些理念在实际工作中可能也会被他人所不接受的,一切以自身的环境去考虑是否适用。

概述:
《代码整洁之道》是软件开发领域的经典之作,作者Robert C. Martin(通常被称为Uncle Bob)是软件工程界的知名人物。该书的核心理念是通过编写整洁、可读性强且易于维护的代码来提高软件质量。

正文

以下内容按照整本书的目录进行浓缩总结而成,本书还是值得一看的,下面只是浓缩了一些要注意的很重要的理念。

整洁代码

  • 编写整洁代码的价值在于提高可读性、可维护性和可扩展性。
  • 简洁性是整洁代码的核心,通过简化代码逻辑、减少重复和保持代码简单性,可以提高代码质量。
  • 可读性是指代码易于被理解和阅读。良好的命名、适当的注释和清晰的代码结构是实现可读性的关键。
  • 可维护性意味着代码易于修改和维护。通过遵循设计原则、拆分函数和类的责任以及提取可复用的代码,可以增强代码的可维护性。
  • 保持代码整洁:每次签入时,代码都比签出时简洁。

命名

  • 使用有意义和描述性的命名可以使代码更易读、理解和维护。
  • 好的命名应该能够清晰地传达变量、函数和类的用途和含义。
  • 避免使用模糊的名称或缩写,而要选择具有明确含义的名称。
  • 保持一致的命名风格有助于代码的统一性和可读性(可以看看组里大家的规范)。

函数

  • 函数应该短小、专注于单一任务,遵循单一职责原则(SRP),例如一个函数的for循环不能超过两行。
  • 短小的函数更易于理解和维护,有助于提高代码的可读性和可测试性。特别是在一个大型函数下,各个小型函数的良好使用能让你更好的知道运行流程。
  • 提取函数是一种常见的重构技术,可以将复杂的代码块拆分成更小、更易于理解的函数,ide的重构功能好好用起来。
  • 使用有意义的函数名和参数命名可以提高函数的可读性。

注释

  • 注释应该解释代码的意图、背后的原因或特定的设计决策,而不是重复代码本身。
  • 避免过度注释,因为过多的注释可能会导致混乱和维护问题。
  • 编写自解释的代码是更好的选择,通过良好的命名和清晰的代码结构来提高代码的可读性。
  • 注释应该准确、简明扼要,并与代码保持同步。
  • 有些老系统的注释可能是误导,不要全信。
  • 不要为了注释而注释(我之前一个组就是这样,一个变量上再写这个变量的名字,好的一个注释完成了)。

格式

  • 代码的格式化和排版对于可读性和一致性非常重要(参照大家的格式,不要自己创建)。
  • 使用一致的缩进和空格风格,例如使用制表符或空格来缩进代码块。
  • 适当地使用空行和空格来增强代码的可读性和分组逻辑。
  • 避免过长的行和复杂的表达式,适当地换行和拆分可以提高代码的可读性。

对象和数据结构

  • 对象和数据结构具有不同的设计原则和用途。对象:把数据隐藏于抽象后,提供函数调用;数据结构:暴露数据,没有有意义的函数提供。
  • 面向对象设计注重封装性和抽象性,隐藏内部实现细节,通过方法提供对数据的操作。
  • 数据结构更加简单直接,通常是将数据暴露给外部,而不提供行为方法。
  • 理解对象(例如领域业务)和数据结构(例如数据传输对象)之间的差异有助于选择适当的设计模式和实现方式。

错误处理

  • 错误处理是软件开发中必不可少的一部分,良好的错误处理可以提高代码的可靠性和可维护性。
  • 明确处理错误并及时通知调用者是一种良好的实践。
  • 使用异常来处理错误情况,而不是简单地返回错误码或特殊值(当然你可以封装在错误里)。
  • 提供清晰、准确的错误消息,以便开发人员和用户能够理解错误的原因和解决方法。
  • 别轻易传递null,很容易出现一些莫名其妙的错误。

边界

  • 边界是系统与外部世界(如数据库、第三方服务)交互的地方。
  • 定义清晰的边界接口有助于隔离和管理与外部系统的交互(把外部调用给加一层,让系统依赖所加的这层)。
  • 使用适配器和封装代码来处理边界交互,确保代码的可读性和可维护性。
  • 避免直接依赖外部系统,使用抽象层将其封装起来。

单元测试

  • 单元测试是保证代码质量的重要手段。
  • 编写可靠、独立和可重复执行的单元测试有助于发现和修复问题。
  • 使用测试驱动开发(TDD)方法(TDD建议好好学习),先编写测试用例,再编写代码以满足测试用例的需求。
  • 单元测试应该简洁、清晰明了,覆盖各种情况和边界条件。
  • 每个测试一个断言。

  • 类是面向对象编程的核心,它们应该具有清晰的目的和职责。
  • 遵循单一职责原则(SRP),每个类应该只负责一项任务。
  • 封装数据和隐藏实现细节,使用适当的访问修饰符来控制对类成员的访问。
  • 通过合理的类设计来提高代码的可读性和可维护性。

系统

  • 系统设计涉及模块划分、依赖关系和组织架构等方面。
  • 良好的系统设计应该有清晰的模块划分和合理的依赖关系,以便于理解和维护。
  • 使用适当的设计模式和架构原则来构建系统,例如依赖注入、领域驱动设计等。
  • 避免循环依赖和紧耦合的模块关系,通过松耦合和抽象化来增强系统的可扩展性。

迭代

  • 迭进式开发是持续交付和持续改进的关键实践。
  • 迭进开发应该注重代码质量,避免技术债务的累积。
  • 频繁进行重构和代码优化,保持代码的整洁性和可维护性。
  • 使用持续集成和自动化测试来确保代码的质量和稳定性。
  • 简单设计规则:运行所有测试、不可重复、表达程序员的意图、尽可能减少类和方法数量。

并发编程

  • 理解并发编程模型和相关概念,如锁、信号量、线程池等。
  • 避免共享可变状态,使用线程安全的数据结构和同步机制。
  • 编写干净、安全的并发代码,避免出现竞态条件和死锁等问题。
  • 把并发代码与非并发代码分开,便于调试。
  • 并非代码的测试尽量全面。

实践

本书最后给出了三章实践,但是由于排版问题和翻译问题(也可能是我自己的理解能力问题)。其实这三章看着比较吃力,大家看后也可以和我交流下。我认为掌握了书中之前的理念,自己在工作学习中一直坚持,肯定会有不一样的收获。

总结

书是好书,一些理念很实用,推荐一看。里面的案例分析如果读着不清晰,可以尝试找些其他的资料看看。


代码整洁之道 学习笔记
http://xjl.info/2023/07/05/software/code-clean/
作者
XJl
发布于
2023年7月5日
许可协议