第1章 整洁代码
What is clean code
Ron Jeffries 对 Clean Code 的排序:
- 能通过所有测试
- 没有重复代码
- 体现系统中的全部设计理念
- 包括尽量少的实体,比如类、方法、函数等
We are the author
Javadoc 中的 @author 字段告诉了我们是什么人,我们是作者,写代码时,应记得自己作为一个作者,要为评判你工作的的读者写代码。使代码易读,自然也会使之易写。
第2章 有意义的命名
- 名副其实:变量、函数和类的名称应该表达了所有的大问题,如果名称还需要注释来补充,那就不算名副其实。
- 避免误导:避免使用系统的专用名称,避免在名称中带入注入List关键字等待有特殊意义的词(即使容器是个List,最好也不要直接写出类型名),避免使用十分类似的名称(如XYZControllerForHandingOfStrings和XYZControllerForStorageOfStrings),避免使用误导性名称(如Ol和01)。
- 做有意义的区分:像a1,a2,an的区分等同于废话,诸如getUser()、getUserInfo()、getUserData()的方法,如果没有明确的约定,也是很难一言看出区别的。要区别名称,必须要让以读者有鉴别不同之处的方式来区分。
- 使用读得出来的名称:比如生成时间戳,不要用genymdhms这样的生造词,用genTimestamp会更像人话。
- 使用可搜索的名称:单字母和数字常量是很难被一下搜出来的,单字母名称仅可用在短方法中的本地变量,名称的长短应与其作用域大小相对应。
- 避免使用编码:不必使用成员前缀,对于接口和实现,不推荐使用“I”开头修饰,不如在实现类中直接添加后缀“Imp”。
- 避免思维映射:专业的程序员和聪明的程序员之间的区别在于,专业的程序员知道,明确是王道,他们写的是其他人能理解的代码(过于”聪明“的程序员写的代码只有自己能看懂)。
- 类名:类名和对象名应该是名词或名词短语,类名不应当是动词
- 方法名:方法名应当是动词或动词短语,访问、修改和断言应该加上前缀”get”、”set”、”is”。
- 每个概念对应一个词:给每个抽象概念(fetch、retrieve、get这些相近词就很糟糕)选一个词,并一以贯之。
- 添加有意义的语境,但不要添加没用的语境,精确才是命名的要点。
第3章 函数
- 短小
- 只做一件事:函数应该做一件事。做好这件事。只做这一件事。
- 每个函数一个抽象层级:让代码拥有自顶向下的阅读顺序、
- 使用描述性名称