编程范式
①课程介绍
- 课程背景
- 课程收益
②编程语言
1.编程语言的必要性
与计算机进行交互(instruction)
2.机器语言
- 二进制
- 8086
介质
3.汇编语言
4.高级语言
高级语言-汇编语言-机器语言
(1)C/C++
C:
C++:
(2)Lisp
介绍:
例子:
(3)JavaScript
基于原型和头等函数的多范式语言
- 过程式
- 面向对象
- 函数式
- 响应式
③编程范式
1. 介绍
程序语言的特性
- 是否允许副作用
- 操作的执行顺序
- 代码组织
- 状态管理
- 语法和词法
2. 常见编程范式
命令式:
面向过程
面向对象
声明式:
函数式
响应式
3. 过程式编程
(1)介绍
- 自项而下
- 结构化编程
(2)举例
js中的面向过程
(3)存在的问题
- 数据和算法关联弱
- 不利于修改和扩充
- 不利于代码重用
4.面向对象编程
- 封装
- 继承
- 多态
- 依赖注入
(1)封装
- 关联数据和算法(进行了保护)
(2)继承
- 无需重写的情况下进行功能扩充
(3)多态
- 不同的结构可以进行接口共享,从而达到函数复用
(4)依赖注入
- 去除代码耦合
(5)五大原则
- 单一职责原则SRP
- 开放封闭原则OCP
- 里式替换原则LSP
- 依赖倒置原则DIP
- 接口分离原则ISP
(6)存在的问题
可能导致引入不必要的内的内容,数据的修改被隐藏
5.函数式编程
函数是第一等公民
纯函数/无副作用
高阶函数/闭包
(1) First Class Function
聚合转发
(2) Pure Function
优势:
- 可缓存
- 可移植
- 可测试
- 可推理
- 可并行
(3) Currying
(4) Composition
(5) Functor
可以当作容器的类型,类型支持对容器内元素进行操作
常见functor:Array(Iterable).mao,Promise.then
(6) Monad
可以去除嵌套容器的容器类型
常见monad:Array.flayMap Promise.then
实例
(7) Applicative
直接对两个容器直接操作
6.响应式编程
异步/离散的函数式编程
数据流
操作符
- 过滤
- 合并
- 转化
- 高阶
示例
(1) Observable
- 观察者模式
- 迭代器模式
- Promise/EventTarget 超集
(2) 操作符
响应式编程的 "compose"
- 合并
- 过滤
- 转化
- 异常处理
- 多播
(3) Monad
去除嵌套的Observable
④领域特定语言
Domain-specific language(DSL):应用于特定领域的语言
HTML
SQL
与通用语言区分
General-purpose language
C/C++
JavaScript
...
1.语言运行
2.lexer
SQL Token分类
- 注释
- 关键字
- 操作符
- 空格
- 字符串
- 变量
切分为有意义的短语