编程范式
课程收益
- 了解不同编程范式的起源和适用场景
- 掌握 JavaScript 在不同的编程范式特别是函数式编程范式的使用
- 掌握创建领域特定语言的相关工具和模式
编程语言
- 机器语言
- 汇编语言
- 中级语言(面向过程C语言)
C: "中级语言"面向过程式语言代表
- 可对位,字节地址,直接操作
- 代码和数据分离倡导结构化编程
- 功能齐全:数据类型和控制逻辑多样化
- 可移植能力强
- 高级语言(面向对象C++,函数式代表lisp,多范式代表javascript)
C++ : 面向对象语言代表
- C with Classes
- 继承
- 权限控制
- 虚函数
- 多态
Lisp: 函数式语言代表
- 与机器无关
- 列表: 代码即数据
- 闭包
Javascript:基于原型和头灯函数的多范式语言
- 过程式
- 面向对象
- 函数式
- 响应式
编程范式
-
什么是编程范式?
程序语言特性
- 是否允许副作用
- 操作的执行顺序
- 代码组织
- 状态管理
- 语法和词法
-
常见的编程范式
-
命令式
- 面向过程
- 面向对象
-
声明式
- 函数式
- 响应式
-
过程式编程
- 自定向下
- 结构化编程
面向过程编程
1. 问题
- 数据与算法关联弱
- 不利于修改和扩充
- 不利于代码重用
2. 封装
- 将初始变量及函数放入类中
- 使用式只需实例化对象,然后调用其中的方法
3. 继承
- 无需重写的情况下进行功能扩充
- 示例 `oldClass extends newClass`
4. 多态
- 不同的结构可以进行接口共享,进而达到函数复用
5. 依赖注入
- 去除代码耦合
面向对象五大原则
- 单一职责原则
- 开放封闭原则
- 里式替换原则
- 依赖倒置原则
- 接口分离原则
函数式编程
- 函数是"第一等公民"
- 纯函数/无副作用
- 高阶函数/闭包
- 可缓存
- 可移植
- 可测试
- 可推理
- 可并行
响应式编程
观察者模式 迭代器模式 Promise/EventTarget超集* cpmpose:合并 过滤 转化 异常处理 多播 去除嵌套的Observabie
特定领域语言
lexer Parse tools visitor