编程范式
前端的主要编程语言是JavaScript
编程语言
程序员 —— 指令 —— 机器;指令即是编程语言
高级语言 —— 汇编语言 —— 机器语言
高级语言: C: 中极语言 过程式语言代表(地址、函数调用)
C++ 面向对象语言代表 (Cwith Classes, 继承,
Lisp: 函数式语言代表 与机器无关;列表:代码即数据
JavaScript: 基于原型和头等函数的多范式语言(过程式、面向对象、函数式)
编程范式、
命令式(如何操作机器改变状态):面向过程、面向对象
声明式:函数式、响应式
过程式:自顶向下、结构式编程(顺序结构、选择结构、循环结构 代替go to)
面向过程的问题
- 数据与算法关联弱
- 不利于修改(改一个就要改一堆)和扩充
- 不利于代码重用(难以抽取函数)
面向对象:封装、继承、多态、依赖注入
- 关联数据与算法(封装)
- 无需重写的情况下进行功能扩充(继承)
- 不同的结构可以进行接口共享,进而达到函数复用(多态) -去除处代码耦合(依赖注入)
面向对象的五大原则
- 单一职责原则
- 开放封闭原则
- 里式替换原则
- 依赖倒置原则
- 接口分离原则(依赖需要用接口来实现)
面向对象的问题
- 总是附带着所有它需要的隐含环境,给了一个一直写烂代码的方式
面向函数:ramdajs
- 函数是第一等公民
- 纯函数:可缓存、可移植、可测试、可推理、可并行
- Currying
- Composition
- factor(容器类型:Array(Iterable).map, Promise.then)
- Monad(可以去除嵌套容器的容器类型)
- Applicative
响应式编程
- 异步/离散的函数式编程
- 数据流
- 操作符
Observable:
- 观察者模式
- 迭代器模式
- Promise/EventTarget 超集*
领域特定语言由通用语言来实现
语言运行:
词法规则、语法规则、语法树、遍历操作进行