编程范式|青训营笔记
编程语言
机器语言

汇编语言

高级语言
- 高级语言:C=A+B
- 汇编语言:LOAD A,ADD B,STORE C
- 机器语言:12234234532450 34523452345234 6789678456768 12234345435645
C/C++
C:"中级语言"过程式语言代表
- 可对位,字节,地址直接操作
- 代码和数据分离倡导结构化编程
- 功能齐全:数据类型和控制逻辑多样化
- 可移植能力强

C++:面向对象语言代表
- C with Classes
- 继承
- 权限控制
- 虚函数
- 多态

Lisp
Lisp:函数式语言代表

JavaScript
基于原型和头等函数的多范式语言

汇编语言总结

编程范式
什么是编程范式
程序语言特性
- 是否允许副作用
- 操作的执行顺序
- 代码组织
- 状态管理
- 语法和词法
常见编程范式
mindmap
编程范式
命令式
面向过程
面向对象
声明式
函数式
响应式
过程式编程


JS中的面向过程

面向过程式编程有何缺点?为什么后面会出现面向对象
面向过程问题
- 数据的算法关联弱(更难找到相关代码)
- 不利于修改和扩充
- 不利于代码重用
面向对象编程
面向对象编程_封装

面向对象编程_继承

面向对象编程_多态

面向对象编程_依赖注入

面向对象编程_五大原则
- 单一职责编程SRP
- 开放封闭原则OCP
- 里式替换原则LSP
- 依赖倒置原则DIP
- 接口分离原则ISP
面向过程式编程有何缺点?为什么我们推荐函数式编程
面向对象问题

函数时编程
- 函数是"第一等公民"
- 纯函数/无副作用
- 高阶函数/闭包

函数式编程_First Class Function

函数式编程_Pure Function
优势
函数式编程_Currying

函数式编程_Composition

函数式编程_Functor
- 可以当作容器的类型,类型支持对容器内元素进行操作
- 常见的functor:Array(Iterable).map,Promise.then

函数式编程_Monad
- 可以去除嵌套容器的容器类型
- 常见monad:Array。flatMap Promise.then

函数式编程_Applicative

响应式编程

响应式编程_Observable
- 观察者模式
- 迭代器模式
- Promise/EventTarget 超集

响应式编程_操作符

响应式编程_Monad

总结

什么是领域特定语言

语言运行

lexer

Parser_语法规则

- 推导式:表示非终结符到(非终结符或终结符)的关系
- 终结符:构成句子的实际内容。可以简单理解为词法分析中的token
- 非终结符:符号或变量的有限集合。它们表示在句子中不同类型的短语或子句
Parser_LL

Parser_LR

tools
- exp::=exp'+'exp
- exp::=exp'*'exp
- exp::='NUMBER'

visitor

总结
