编程随想--代码整洁之道

所有内容基于各大 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/
作者
Artibix
发布于
2024年10月20日
许可协议