JavaScript
- 基于原型和头等函数的多范式语言
- 过程式
- 面向对象
- 函数式
- 响应式*

编程范式
程序语言具体特性
- 是否允许副作用
- 操作的执行顺序
- 代码组织
- 状态管理
- 语法和词法
编程范式
- 命令式
- 面向过程
- 面向对象
- 声明式
- 函数式
- 响应式
过程式编程
- 自顶向下
程序可细分为模块,模块又可细分为变量和函数。变量用具体数据结构来存储,而函数细化为函数和语句。
- 结构化编程
即顺序结构,选择结构,以及循环结构。
缺点:
- 数据与算法关联弱
- 不利于修改和扩充
- 不利于代码重用
面向对象编程
- 封装
- 关联数据和算法
- 继承
- 无需重写的情况下进行功能扩充
- 多态
- 不同的结构可以进行接口共享、进而达到函数复用
- 依赖注入*
- 去除代码耦合
五大原则
- 单一职责原则SRP(Single Responsibility Principle)
- 开放封闭原则OCP(Open-Close Principle)
- 里式替换原则LSP(the Liskov Substitution Principle LSP)
- 依赖倒置原则DIP(the Dependency Inversion Principle DIP)
- 接口分离原则ISP(the Interface Segregation Principle ISP)
同样也有缺点:
编程过程类似打补丁,并且仅需简单功能也需要移植整个类。
函数式编程
Fitst Class Function
聚合转发
Pure Function
- 优势
- 可缓存
- 可移植
- 可推测
- 可推理
- 可并行
Currying
Composition
Functor
可以当作容器的类型,类型支持对容器内元素进行操作,常见的functor : Array(Iterable).map, Promise.then
Monad
可以去除嵌套容器的容器类型,常见 monad : Array.flatMap Promise.then
Applicative
直接对两个容器操作
响应式编程
- 异步/离散的函数式编程
- 数据流
- 操作符
- 过滤
- 合并
- 转化
- 高阶
Observable
- 观察者模式
- 迭代器模式
- Promise / EventTarget 超集
操作符
响应式编程的“compose"
- 合并
- 过滤
- 转化
- 异常处理
- 多播

领域特定语言
-
Domain-specific language (DSL) : 应用于特定淋浴的语言
-
HTML
-
SQL
-
语言运行过程

lexer
- SQL Token分类
- 注释
- 关键字
- 操作符
- 空格
- 字符串
- 变量
推导式:表示非终结符到(非终结符或终结符)的关系。终结符:构成句子的实际内容。可以简单理解为词法分析中的token。
非终结符:符号或变量的有限集合。它们表示在句子中不同类型的短语或子句。
Parser_LL & LR
LL:从左到右检查,从左到右构建语法树
LR:从左到右检查,从右到左构建语法树
总结

今天学习了编程范式中的基本问题,内容较多,为日常编程中的低层原理以及编程规范和编程方法,对理解深层编程语法有很大帮助,需要多多记忆。