代码整洁之道

主要思想
测试
有意义的命名
可重用性
体现设计理念
实体少
依赖关系少
代码逻辑清晰
分层次
性能调优
命名
要有意义
- 除非是单纯用来遍历的变量或者数,否则单独设置一个有意义的变量或者常量
- 读得出来
- 可搜索
意义要明确
类class替换复杂的数据结构
命名差异要明显
命名的区分也要有意义
- 使用数字系列来区分
- 使用近义词或者多余词来区分
避免使用编码
- 成员前缀
- 接口和实现
类名
类名、对象名使用名词或名词短语
要有明确意义
- 类名Data
方法名使用动词或动词短语
- 属性访问器get前缀
- 属性修改器set前缀
- 断言is前缀
使用语境或者类来定义模块变量
使用对领域人士一看就懂的专业名称
函数
短小
只做好一件事
- 判断是否只做了一件事---没办法继续拆分出函数来
- 多个步骤在同一个抽象层上
参数最多3个,超过3个使用参数对象
函数名要名副其实
- 不要做函数名以外的事情
错误异常
- 使用异常代替返回错误码
- 抽离try/catch代码块
消灭重复
注释
无法用代码来表达意图时才使用注释
值得写的注释
- 法律信息
- 无法从代码中可以获得的信息
- 警示
- TODO
- 解释某个巧妙的地方
要删除的注释
- 能够从代码中获取信息的注释
- 被注释的代码
格式
垂直方向
紧密相关的代码靠近
不紧密相关的代码用空格隔开
同一作用域的变量统统放在顶部
代码太长就要拆分
- 不仅以函数为单位进行拆分,甚至以类、文件为单位
水平方向
- 紧密相关事物靠近
- 不紧密相关的代码用空格隔开
- 使用空格强调前面的运算符
缩进
while、for语句体为空
错误处理
使用异常而非返回码
先写try...catch
当异常种类较多时打包成一个单独的异常类
使用特例模式
不返回、传递空值(null、undefined)
边界
调用外部接口时有所封装
- 语言本身的接口
- 外部框架、插件
为未来可能的功能接口留出位置
避免自己系统的代码过度使用第三方代码中的特定信息
单元测试
在编写生产代码前编写单元测试
可读性
每个测试一个断言
FIRST原则
Fast快速
- 测试速度要快
Independent独立
- 每个测试独立运行
Repeatable可重复
- 可以在任何环境中重复通过
Self-Validating自足验证
- 要有布尔值输出
Timely及时
- 应该及时编写
类
测试先行
短小
单一权责
类名称应该描述其权责
- 如果无法为某个类命名精确的名称,那么这个类就太长了
保持内聚
依赖于抽象(抽象类)而非具体细节(实现类)
XMind: ZEN - Trial Version