编程范式
一. 课程介绍
背景:
1. 前端开发的主要语言为JS
2. JS做为一种融合了多种编程范式的语言,灵活性高
3. 前端开发人员需要根据场景在不同的编程范式间自如切换
4. 进一步需要创造特定语言抽象业务问题
二. 编程语言
机器语言: 8086指令格式
汇编语言: 用字母代替数字
高级语言: C/C++
C++: C with class
继承
权限控制
虚函数
多态
Lisp:函数式语言代表
与机器无关
列表:代码即数据
闭包
JS:基于原型和头等函数的多范式编程
过程式
面向对象
函数式
响应式
三.编程范式
程序语言特性:1. 是否允许副作用
2. 操作的执行顺序
3. 代码组织
4. 状态管理
5. 语法和词法
编程范式:
1. 命令式:面向过程、面向对象
2. 声明式:函数式、响应式
过程式编程:自顶向下、结构化编程
缺点:数据和算法关联弱
不利于修改和扩充
不利于代码重用
面向对象:
封装:关联数据和算法
继承:无需重写的情况下进行功能扩充
多态:不同的结构可以进行接口共享,进而达到函数复用
依赖注入:去除代码耦合
五大原则:
1. 单一职责原则
2. 开放封闭原则
3. 里式替换原则
4. 依赖倒置原则
5. 接口分离原则
缺点:数据太隐蔽
函数式编程:减少变化的部分
函数第一(聚合转发)
参数重复的话,可以先存入闭包
组合函数
优势:可缓存,可移植,可测试,可推理,可并行
Functor:可以当作容器的类型,类型支持对容器内元素进行操作
常见的Functor:Array(Iterable).map, Promise.then
Monad:可以去除嵌套容器的容器类型
常见的Monad:Array.flatMap Promise.then
Applicative:直接对两个容器进行操作
响应式编程:异步/离散的函数式编程
有两个概念:数据流、操作符(过滤、合并、转化、高阶)
Observable:观察者模式、迭代器模式、Promise/EventTarget超集
操作符(响应式编程的“compose”):过滤、合并、转化、异常处理、多播
Monad:去除嵌套的Observable
四.领域特定语言
语言运行:
lexer:SQL Token 分类
1. 注释 2. 关键字 3. 操作符 4. 空格 5. 字符串 6. 变量
Parser 语法规则
上下文无关语法规则
推导式:表示非终结符到(非终结符或终结符)的关系。
终结符:构成句子的实际内容。可以简单理解为词法分析中的token。
非终结符:符号或变量的有限集合。它们表示在句子中不同类型的短语或子句。
Parser_LL&LR
LL:从左到右检查,从左到右构建语法树
LR:从左到右检查,从右到左构建语法树
tools:用工具来产生语法解释器
visitor:遍历工具