编程范式 | 青训营笔记

96 阅读2分钟
编程范式 | 青训营笔记
编程语言

C:中级语言过程式语言代表

  • 可对位、字节、地址直接操作
  • 代码和数据分离倡导结构化编程
  • 功能齐全:数据类型和控制逻辑多样化
  • 可移植能力强

C++:面向对象语言代表

  • C with classes
  • 继承
  • 权限控制
  • 虚函数
  • 多态

Lisp:函数式语言代表

  • 与机器无关
  • 列表:代码即数据
  • 闭包

JavaScript:基于原型和头等函数的多范式语言

  • 过长时
  • 面向对象
  • 函数式
  • 响应式
编程范式

程序语言特性

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

过程式编程

  • 自顶向下

  • 结构化编程

  • JS中的面向过程

  • 面向对象编程

    • 封装:关联数据与算法

    • 继承:无需重写的情况下进行功能扩充

    • 多态:不同的结构可以进行接口共享,进而达到函数复用

    • 依赖注入:去除代码耦合

    • 五大原则:

      • 单一职责原则SRP
      • 开放封闭原则OCP
      • 里式替换原则LSP
      • 依赖倒置原则DIP
      • 接口分离原则ISP
  • 函数式编程

    • 函数是第一等公民

    • 纯函数 无副作用

    • 高阶函数 闭包

    • 优势

      • 可缓存
      • 可移植
      • 可测试
      • 可推理
      • 可并行
    • Functor:可以做为容器的类型,类型支持对容器内元素进行操作

    • Monad:可以去除嵌套容器的容器类型(去除嵌套的Observable)

    • Applicative:直接对两个容器直接操作

  • 响应式编程 Observable (观察者模式、迭代器模式、Promise / EventTarget超集)

    • 数据流

    • 响应式变成的compose

      • 合并
      • 过滤
      • 转化
      • 异常处理
      • 多播
    • 操作符

      • 过滤
      • 合并
      • 转化
      • 高阶
领域特定语言

语言运行

x+y --> lexer --> [x, +, y] --> parser --> visit --> interpret / Code gen

lexer: SQL Toekn分类

语法规则:

  • 推导式:表示 非终结符 到 非终结符或终结符的关系
  • 终结符:构成句子的实际内容。可以简单理解为词法分析中的token
  • 非终结符:符号和变量的有限集合。它们表示在句子中不同类型的短语和字句