编程范式(Programming paradigm)
一、课程介绍
课程介绍
① 课程背景
- 前端的主要编程语言为JavaScript。
- JavaScript作为一种融合了多种编程范式的语言,灵活性非常高。
- 前端开发人员需要根据场景在不同编程范式间自主切换。
- 进一步需要创造领域特定语言抽象业务问题。
② 课程收益
- 了解不同编程范式的起源和使用场景。
- 掌握JavaScript在不同的编程范式特别是函数式编程范式的使用。
- 掌握创建领域特定语言的相关工具和模式。
二、编程语言
① 为什么要使用编程语言
② 机器语言
③ 汇编语言
④ 高级语言
1.C/C++
C:“中级语言”过程式语言代表
- 可对位,字节,地址直接操作
- 代码和数据分离倡导结构化编程
- 功能齐全:数据类型和控制逻辑多样化
- 可移植能力强
C/C++
C++:面向对象语言代表
- C with Classes
- 继承
- 权限控制
- 虚函数
- 多态
2.Lisp
Lisp:函数式语言代表
- 与机器无关
- 列表:代码即数据
- 闭包
3.JavaScript
- 基于原型和头等函数的多范式语言
- 过程式
- 面向对象
- 函数式
- 响应式
总结
三、编程范式
① 什么是编程范式?
编程语言特性:
- 是否允许副作用
- 操作的执行顺序
- 代码组织
- 状态管理
- 语法和词法
② 常见编程范式
编程范式:
- 命令式
面向过程
面向对象
- 声明式
- 函数式
- 响应式
③ 过程式编程
- 自顶向下
- 结构化编程
1.自顶向下
- 程序
模块:
1.变量:数据结构
2.函数:函数,语句
2.结构化编程
④ JS中的面向过程
⑤ 面向过程
思考一下
1.面向过程的问题
- 数据与算法关联弱
- 不利于修改
- 不利于代码重用
- 没有面向对象易维护,易复用,易扩展等等优点
2.面向对象编程
- ① 封装
- ② 继承
- ③ 多态
- ④ 依赖注入*
1.封装:
- 关联数据与算法
2.继承:
- 无需重写的情况下进行功能扩充
3.多态:
- 不同的结构可以进行接口共享,进而达到函数复用
4.依赖注入:
- 去除代码耦合
5.五大原则
- 单一职责原则
- 开放封闭原则
- 里氏替换原则
- 依赖倒置原则
- 接口分离原则
⑥ 面向过程
思考一下
1.面向对象的问题:
面向对象编程语言的问题在于,它总是附带着所有它需要的隐含环境。你想要一个香蕉,但得到的却是一个大猩猩拿着香蕉,而且还有整个丛林。
2.函数式编程的优点:
- 简洁
- 易于并发编程
- 提高复用性和可扩展性好
⑦ 函数式编程
- 函数是“第一等公民”
- 纯函数/无副作用
- 高阶函数/闭包
1.函数式编程__First Class Function
2.函数式编程__Pure Function
① 优势
- 可缓存
- 可移植
- 可测试
- 可推理
- 可并行
3.函数式编程__Curring
4.函数式编程__Functor
可以当作容器的类型,类型支持对容器内元素进行操作
常见的functor:Array(iterable).map,Promise.then
5.函数式编程__Monad
可以去除嵌套容器的容器类型
常见的monad:Array.flatMap,Promise.then
6.函数式编程__Composition
7.函数式编程__Applicative
- 对两个容器直接操作
⑧ 响应式编程
1.⑧.Observable
2.⑧.操作符
3.⑧.Monad
总结一下:
编程范式:
1.过程式:
- 自顶向下
- 结构化编程
- 问题
2.面向对象:
- 封装
- 继承
- 多态
- 原则
- 问题
3.函数式编程:
- 一等函数
- 纯函数
- curry/compose/functor/monard/applicative
4.响应式编程
- observable
- 操作符
- monard
四、领域特定语言
① 什么是领域特定语言
②.语言运行
③.lexer
④.lexer
⑤.Parser__语法规则
⑥.Parser_LL
⑦.Parser_LR
⑧.tools
⑨.visitor
课程总结
编程范式
1. 编程语言:
- 机器语言
- 汇编语言
- 中级语言:C
- 高级语言:C++,Lisp,JavaScript
2.编程范式:
- 什么是编程范式
- 过程式编程
- 面向对象编程
- 函数式编程
- 响应式编程
3.领域特定语言:
- 创造DSL:lexer,parser,tools,visitor