编程范式|青训营笔记

62 阅读2分钟

image.png

编程语言

  • 机器语言(直接输入数字)

  • 汇编语言(字母代替数字)

  • 中级语言

  • 高级语言

image.png

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

  • 可对位,字节,地址直接操作

  • 代码和数据分离倡导结构化编程

  • 功能齐全:数据类型和控制逻辑多样化

    • 声明整型变量x和字符指针变量str,使用了printf函数进行输出
  • 可移植能力强

    • 代码中使用了标准输入输出库,这使得代码可以在不同的平台上运行

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

  • C with Classes

    • C++最初是作为C语言的一种扩展,其基本语法与C语言相同,但增加了类、继承、多态等面向对象的特性
  • 继承

  • 权限控制

  • 虚函数

  • 多态

Lisp:函数式语言代表

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

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

  • 过程式
  • 面向对象
  • 函数式
  • 响应式

编程范式

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

程序语言特性

  1. 是否允许副作用
  2. 操作的执行顺序
  3. 代码组织
  4. 状态管理
  5. 语法和词法

常见编程范式

命令式:面向过程、面向对象

面向过程问题

  • 数据与算法关联弱

  • 不利于修改和扩充

  • 不利于代码重用

面向对象编程

  • 封装(关联数据与算法)

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

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

  • 依赖注入(去除代码耦合)

五大原则

  • 单一职责原则SRP
  • 开放封闭原则OCP
  • 里氏替换原则LSP
  • 依赖倒置原则DIP

声明式:函数式、响应式

面向对象编程问题 总是附带着所有它需要的隐含环境

函数式编程

  • 函数是”第一等公民“
  • 纯函数/无副作用
  • 高阶函数/闭包

优势

  • 可缓存

  • 可移植

  • 可测试

  • 可推理

  • 可并行

functor

  • 可做容器的类型,类型支持对容器内元素进行操作
  • 常见functor:Array(lterable).map,Promise.then

Monad

  • 可去除嵌套容器的容器类型
  • 常见Monad:Array.flatMap Promise.then

Applicative

  • 直接对两个容器进行操作
  • Identity:Maybe(id).ap(v) === v;
  • Homomorphism:Maybe(f).ap(Maybe(x))===Maybe(f(x));
  • Interchange:v.ap(Maybe(x))=== Maybe(f=>f(x)).ap(v));
  • Composition:Maybe(compose).ap(u).ap(v).ap(w) ===u.ap(v.ap(w));

响应式编程

异步/离散的函数时编程

  • 数据流
  • 操作符
    • 过滤
    • 合并
    • 转化
    • 高阶

observable

  • 观察者模式
  • 迭代器模式
  • Promise/EventTarget超集

image.png

操作符 响应式编程的compose

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

Monad

  • 去除嵌套的Observable

过程式:自顶向下、结构化编程

image.png

image.png

语言运行

image.png

lexer

SQL Token分类

  • 注释
  • 关键字
  • 操作符
  • 空格
  • 字符串
  • 变量

Parser语法规则

image.png

image.png

image.png

image.png

image.png

image.png