编程范式 | 青训营笔记

56 阅读2分钟

编程范式

程序语言特性:

  • 是否允许副作用
  • 操作的执行顺序
  • 代码组织
  • 状态管理
  • 语法和词法

编程范式

  • 命令式(如何操作机器、改变状态)
    • 面向过程:把操作依据过程进行分组;将问题分解为一系列步骤,通过函数的调用来实现程序的功能
    • 面向对象:根据操作和对应的状态进行分组;通过对象的交互来实现程序的功能
  • 声明式(程序员声明想要的结果,而不关心具体操作)
    • 函数式:将计算视为函数的应用,通过一系列函数组合来声明逻辑
    • 响应式:一系列的数据流,描述了数据的变化和处理;通过数据的变化来触发函数的执行

面向对象五大原则:

  • 单一职责原则:一个类只负责一个功能领域中的相应职责;一个类只负责一个功能领域中的相应职责
  • 开放封闭原则:对扩展开放,对修改封闭
  • 里式替换原则:子类可以替换父类并出现在父类应该出现的任何地方
  • 依赖倒置原则:具体依赖抽象,上层依赖下层
  • 接口分离原则:依赖通过接口进行区分

面向对象编程语言的问题在于,总是附带着所有它需要的隐含环境
前端推荐函数式编程

函数式编程:用纯函数的组合描述计算过程,尽量减少变化的部分

  • 函数是“第一等公民”
  • 纯函数(不依赖外部环境) / 无副作用(不修改参数)
    优势:可缓存、可移植、可测试、可推理、可并行
  • 高阶函数 / 闭包

组合函数:

function composeFn(m,n){
    return function(count){
        return n(m(count))
    }
}
​
var newFn = composeFn(double,square)

容器式编程
把特殊情况的处理封装到容器内

响应式编程:在异步/离散环境下的函数式编程
面向数据流和变化传播的声明式编程范式(可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播)
响应式编程Observable:融合了观察者模式(订阅数据的改变)与迭代器模式(持续地推送数据)