编程随想--代码整洁之道
所有内容基于各大 code clean 项目,和自己的实践而来。不一定要全部遵守,没有最佳实践,只有最合适的实践。
整洁有秩序的代码更能让人心情愉快,也为了避免「屎山」,建议所有程序员都保持自己的代码保持整洁,提高自己的代码质量,不要推积技术债。
所有语言通用
变量
- 有意义的变量名:避免单字母命名,变量名要可读性好,一眼就能知道所表达的含义。
- 常量保持不变:声明常量,通常全部大写,在使用过程中保持不变。
函数
- 参数尽量不超过 2 个,多了以后可以考虑封装成对象
- 功能保持单一,只做一层抽象
- 函数名也应有意义
- 永远不要重复代码
- 参数要有默认值(精简代码)
- 不要使用 flag 作为参数,可以分成两个函数
- 不要对参数进行修改
- 不要污染全局环境,可以设计成继承来实现
- 使用函数式编程,如 map、reduce、filter
- 封装判定条件
- 避免否定条件,如 isNot
- 避免条件判断,使用多态替换
- 删除不使用的函数
- 使用 getter or setter 封装内部逻辑(不一定要 get、set 前缀)
类
- 单一职责原则(SRP):一个类只有一个职责
- 开闭原则(OCP):类、模块、函数应该易于扩展,不能修改;对外拓展,对内封闭
- 利斯科夫替代原则(LSP):子类对象能够替换成父类使用,也就是说
- 子类必须扩展父类功能,而不是改变父类
- 子类可以加强父类约束,不能减弱(比如参数、返回值、状态等方面)
- 接口隔离原则 (ISP):同 SRP,是针对接口功能的限制,一个接口也只能有一个职责,类与类的依赖建立在最小职责的接口上面
- 依赖反转原则 (DIP):高层模块和低层模块都应该依赖于一个抽象(接口或抽象类),而不是直接依赖对方的具体实现。
- 依赖倒置原则(DIP):一种软件架构设计的原则(抽象概念)。
- 控制反转(IoC):一种反转流、依赖和接口的方式(DIP 的具体实现方式)。
- 依赖注入(DI):IoC 的一种实现方式,用来反转依赖(IoC 的具体实现方式)。
- IoC 容器:依赖注入的框架,用来映射依赖,管理对象创建和生存周期(DI 框架)。
- 优先使用组合模式而非继承
什么时候使用继承?
- 继承关系表现为”是一个”而非”有一个”(如动物->人 和 用户->用户细节)
- 可以复用基类的代码(“Human”可以看成是”All animal”的一种)
- 希望当基类改变时所有派生类都受到影响(如修改”all animals”移动时的卡路里消耗量)
其他
- 代码格式化,大小写一致
- 调用函数的函数和被调函数应放在较近的位置
- 只对存在一定业务逻辑复杂性的代码进行注释
- 不要在代码库中遗留被注释掉的代码
- 不需要版本更新类型注释
- 避免位置标记
- 避免在源文件中写入法律评论
Javascript
- 避免类型判断,因为 js 是弱类型语言,可以使用 TypeScript
- Async/Await 是较 Promises 更好的选择(ES6 使用 Promises,ES7 优先 Async/Await)
参考
编程随想--代码整洁之道
https://artibix.github.io/programming-specifications/