代码整洁之道
来源:互联网 发布: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)“一开始就做对系统”纯属神话。我们应该只去实现今天的用户故事,然后重构,明天再扩展系统、实现新的用户故事,这就是迭代和增量敏捷的精髓所在。
- [代码整洁之道]-整洁代码
- 代码整洁之道
- 代码整洁之道
- 代码整洁之道
- 代码整洁之道
- 代码整洁之道
- 《代码整洁之道》
- 代码整洁之道
- 代码整洁之道
- 代码整洁之道
- 代码整洁之道
- 代码整洁之道
- 代码整洁之道
- 代码整洁之道
- 代码整洁之道
- 代码整洁之道
- 代码整洁之道
- 代码整洁之道
- typedef 与#define的区别
- Hadoop MapReducer工作过程
- 理解 哈希
- 广告活动弹窗
- python -- 拉勾网爬虫模拟登录
- 代码整洁之道
- 【PD】PowerDesigner使用教程
- The method ** from the type UsrTokenBo refers to the missing type HttpSession
- STM32+ucosll程序跑飞问题解决办法
- C++_STL之string用法
- dubbo 新手 003(错误记录)
- oracle时间格式处理
- 简单的SSM框架
- shell脚本实现监控某个进程意外停止后拉起进程