代码整洁之道

来源:互联网 发布:2017淘宝最新排名规则 编辑:程序博客网 时间:2024/06/11 05:02

一、命名

1.有意义的命名

我们给变量、函数、参数、类、包命名,要见名知意

选个好名字要花时间,但省下来的时间比花掉的多。一个好名字,在你见到它的时候,无需注释,它就会告诉你,它为什么会存在,它做什么的事,应该怎么用。

体现本意的名字能让人更容易理解和修改代码。

2.类名

类名和对象名应该是名词或名词短语,类名不应当是动词。如:Customer、WikiPage、Account。

3.方法名

方法名应当是动词或动词短语,如:postPayment、deletePage、save。

4.变量名

除了在循环里面,不可以用一个字母命名。

二、函数

1、短小

函数的第一规则是要短小。函数就应该小。

每个函数到底该有多长?20行封顶最佳。

2、只做一件事

每个函数只做一件事,做好这件事。

每个函数都一目了然,每个函数都依序把你带到下一个函数。

3、抽象层级

让代码拥有自顶向下的阅读顺序。

4、分离指令与询问

要么是做点什么,要么回答点什么,但二者不可兼得。

5、抽离Try/Catch代码块

抽离try-cacth。

函数应该只做一件事,错误处理也是一件事情,也应该封装为函数。

6、尽量减少重复代码

重复使代码臃肿,是一些邪恶的根源。

7、使用异常替代返回错误码

防止深层次嵌套的出现,使用异常替代返回错误码,这样就能从主路径中分离出来,得到简化。

三、注释

注释不是越多越好,我们要追求高度精确,且十分简洁的注释,因为,代码总在变化,不停地迭代,但是注释我们却很少来维护,所以注释要少量、整洁、有力表达,把更多的时间投入到整理重构代码中去。

1、尽量用代码来阐述

也就是说,取一个见名知意我名字十分重要,可以省去注释。

2、好注释

唯一真正好的注释就是你想办法不去写注释。

四、格式

1、垂直格式:垂直方向上要有区隔,如两个代码块中间的空白行。

2、垂直顺序:一般而言,被调用的函数应该放在执行调用的函数下面。

3、横向格式:一行代码的宽度不要超过边界,如果实际中需要很长,可以折行。

4、缩进规则。格式的技巧可以使类更可读。

五、对象和数据结构

1、对象和数据结构之间的二分原理

过程式代码(使用数据结构的代码)便于在不改动既有数据结构的前提下添加新函数,而身对象代码便于在不改动既有函数的前提下添加新类。

反过来说,过程式代码难以添加新数据结构,因为必须修改所有函数。面向对象代码难以添加新函数,因为必须修改所有类。

所以,对于面向对象较难的事,对于过程式代码却较容易,反之亦然。

老练的程序员知道,一切都是对象只是一个传说。有时候你真的想要在简单数据结构上做一些过程式的操作。

2、得墨忒耳律:模块不应了解它所操作对象的内部情形。

3、数据传送对象

DTO:Data Transfer Object,是一种只有公共 变量、没有函数的类。常见的就是Bean结构。

4、总结

对象曝露行为,隐藏数据。便于汪加新对象类型而无需修改既有行为,同时也难以在既有对象中添加新行为。数据结构曝露数据,没有明显的行为。便于向既有数据结构添加新行为,同时也难以向既有函数添加新数据结构。

六、错误处理

1、特例模式

创建一个类或配置一个对象,用来处理特例,客户代码就不用应会异常行为了,异常行为被封装到特例对象中。

2、别返回null值

返回null值其实是给自己增加工作量,如果少做一次null值检查,就可能抛出NullPointerException异常。如果你打算在方法中返回null值,不如抛出异常,或是返回特例对象。

3、别传递null值

在大多数编程语言中,没有良好的方法能对付由调用者意外传入的null值。因此,恰当的做法就是禁止传入null值。

七、边界

1、第三方代码

第三方代码帮助我们在更少时间内发布更丰富的功能。我们没有测试第三方代码的职责,但要为使用其代码编写测试用例,这叫做学习性测试。

无论如何,我们都要学习使用API,而编写测试则是获得这些知识的容易而不会影响其他工作的途径。

2、定义接口

定义接口的好处是,在没有实现的时候,我们依然可以调用它。

八、单元测试

1、测试代码和生产代码一样重要。它应该像生产代码一般保持整洁。

2、整洁测试的三要素:可读性、可读性、可读性。

3、单元测试:构造-操作-检验。

4、每个测试一个断言。

5、每个测试一个概念。

6、整洁的测试还遵循以下5条:

(1)快速

(2)独立

(3)可重复

(4)自足验证。测试应该有布尔值输出,无论是否通过,不应该通过查看日志来确认。

(5)及时

九、类

1、类中顺序:公共静态常量,私有静态常量,私有实体变量,公共函数,私有工具函数。

2、类应该短小

(1)单一权责原则(SRP):SRP是OO设计中最为重要的概念,需要理解和遵循。

(2)内聚:类应该只有少量实体变量。类中方法操作的变量越多,就越黏聚到类上。如果类中的每个变量都被每个方法所使用,则该类具有最大的内聚性。

(3)保持内聚性就会得到许多短小的类。

3、为了修改而组织——隔离修改

我们可以借助接口和抽象类来隔离这些细节带来的影响。

十、系统层级上的整洁

1、将系统的构造与使用分开

(1)工厂模式:应用自行控制何时创建对象,构造的细节隔离于应用程序之外。

(2)依赖注入:可以实现分离构造与使用。

2、扩容

(1)“一开始就做对系统”纯属神话。我们应该只去实现今天的用户故事,然后重构,明天再扩展系统、实现新的用户故事,这就是迭代和增量敏捷的精髓所在。