编程范式 | 青训营笔记
编程语言
C:中级语言过程式语言代表
- 可对位、字节、地址直接操作
- 代码和数据分离倡导结构化编程
- 功能齐全:数据类型和控制逻辑多样化
- 可移植能力强
C++:面向对象语言代表
- C with classes
- 继承
- 权限控制
- 虚函数
- 多态
Lisp:函数式语言代表
- 与机器无关
- 列表:代码即数据
- 闭包
JavaScript:基于原型和头等函数的多范式语言
- 过长时
- 面向对象
- 函数式
- 响应式
编程范式
程序语言特性
- 是否允许副作用
- 操作的执行顺序
- 代码组织
- 状态管理
- 词法与语法
过程式编程
-
自顶向下
-
结构化编程
-
JS中的面向过程
-
面向对象编程
-
封装:关联数据与算法
-
继承:无需重写的情况下进行功能扩充
-
多态:不同的结构可以进行接口共享,进而达到函数复用
-
依赖注入:去除代码耦合
-
五大原则:
- 单一职责原则SRP
- 开放封闭原则OCP
- 里式替换原则LSP
- 依赖倒置原则DIP
- 接口分离原则ISP
-
-
函数式编程
-
函数是第一等公民
-
纯函数 无副作用
-
高阶函数 闭包
-
优势
- 可缓存
- 可移植
- 可测试
- 可推理
- 可并行
-
Functor:可以做为容器的类型,类型支持对容器内元素进行操作
-
Monad:可以去除嵌套容器的容器类型(去除嵌套的Observable)
-
Applicative:直接对两个容器直接操作
-
-
响应式编程 Observable (观察者模式、迭代器模式、Promise / EventTarget超集)
-
数据流
-
响应式变成的compose
- 合并
- 过滤
- 转化
- 异常处理
- 多播
-
操作符
- 过滤
- 合并
- 转化
- 高阶
-
领域特定语言
语言运行
x+y --> lexer --> [x, +, y] --> parser --> visit --> interpret / Code gen
lexer: SQL Toekn分类
语法规则:
- 推导式:表示 非终结符 到 非终结符或终结符的关系
- 终结符:构成句子的实际内容。可以简单理解为词法分析中的token
- 非终结符:符号和变量的有限集合。它们表示在句子中不同类型的短语和字句