一、什么是整洁的代码
有多少程序员,就有多少定义。但共性都有以下几点:
- 高效(性能)
- 优雅&简单直接(可读性)
- 消除重复
二、怎么才能写出整洁的代码
1.有意义的命名
- 名副其实 —- 命名要有实际意义 重构方法实现时方法名是否还能否清晰表意,是否需要同步修改
- 避免误导 —- 命名不全、不合适的缩写
- 有意义的区分 —- ProductData、ProductInfo 避免废话冗余,NameString or Name
- 读的出来的名称 —- 切记不要造词 genymdhms —> generateTimestamp
- 避免思维映射 —- 不应当让读者把你的命名翻译成他们熟知的的名称
- 有意义的语境 —- name or companyName or productName
PS:类名:名词或名词短语,避免使用Mananger、Processer、Info等
方法名:动词或动词短语
2.函数
- 短小 —- 少嵌套
- 只做一件事(单一职责)
- 函数中的语句处于同一抽象层
- 使用描述性的名称
- 参数越少越好 —- 参数组合 避免标识参数boolean 多个参数是否应该合并封装成类
- 无副作用 —- 该做的事没做好 or 做了不该做的事
- 消除重复
3.类
- 类应该短小
- 单一职责
- 内聚
4.注释
- 注释不能美化糟糕的代码
- 对意图的解释 — 简洁
- 警示
- 误导性注释 — 理解不够精确 or 代码变迁
- 多余的注释
注释的代码 — 干掉它
不要给糟糕的代码加注释——重写吧!
5.对象与数据结构
- 对象隐藏数据,暴漏行为 —- 便于添加新对象类型而无需修改既有行为,但难以在既有的对象中添加新行为
- 对象暴漏数据,隐藏行为 —- 便于向既有数据添加新行为,但难以向既有函数添加新的数据结构
6.错误处理
- 使用异常而非错误码 —- 返回码需要在条用之后即可检查处理,扰乱调用者代码
- try-catch-finally —– 只try明确存在异常的代码 明确catch类型,切记不要通吃导致问题掩盖
- 返回值尽量别传null用空列表等代替
7.边界
- 谨慎使用第三方代码
- 未知的代码