编程范式 | 青训营笔记

97 阅读2分钟

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:从左到右检查,从右到左构建语法树

总结

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