编程范式
程序语言特性:
- 是否允许副作用
- 操作的执行顺序
- 代码组织
- 状态管理
- 语法和词法
编程范式
- 命令式(如何操作机器、改变状态)
- 面向过程:把操作依据过程进行分组;将问题分解为一系列步骤,通过函数的调用来实现程序的功能
- 面向对象:根据操作和对应的状态进行分组;通过对象的交互来实现程序的功能
- 声明式(程序员声明想要的结果,而不关心具体操作)
- 函数式:将计算视为函数的应用,通过一系列函数组合来声明逻辑
- 响应式:一系列的数据流,描述了数据的变化和处理;通过数据的变化来触发函数的执行
面向对象五大原则:
- 单一职责原则:一个类只负责一个功能领域中的相应职责;一个类只负责一个功能领域中的相应职责
- 开放封闭原则:对扩展开放,对修改封闭
- 里式替换原则:子类可以替换父类并出现在父类应该出现的任何地方
- 依赖倒置原则:具体依赖抽象,上层依赖下层
- 接口分离原则:依赖通过接口进行区分
面向对象编程语言的问题在于,总是附带着所有它需要的隐含环境
前端推荐函数式编程
函数式编程:用纯函数的组合描述计算过程,尽量减少变化的部分
- 函数是“第一等公民”
- 纯函数(不依赖外部环境) / 无副作用(不修改参数)
优势:可缓存、可移植、可测试、可推理、可并行 - 高阶函数 / 闭包
组合函数:
function composeFn(m,n){
return function(count){
return n(m(count))
}
}
var newFn = composeFn(double,square)
容器式编程
把特殊情况的处理封装到容器内
响应式编程:在异步/离散环境下的函数式编程
面向数据流和变化传播的声明式编程范式(可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播)
响应式编程Observable:融合了观察者模式(订阅数据的改变)与迭代器模式(持续地推送数据)