[ 前端与 HTML | 青训营笔记 ]

63 阅读3分钟

第四节 编程范式

一、编程语言

  • 机器语言:8086指令格式
  • 汇编语言
  • 中级语言:
    • 面向过程代表——C
  • 高级语言:
    • 面向对象代表——C++;
    • 函数式代表——Lisp;
    • 多范式代表——JavaScript

C/C++:

  1. C:“中级语言”过程式语言代表
  • 可对位,字节,地址直接操作
  • 代码和数据分离倡导结构化编程
  • 功能齐全∶数据类型和控制逻辑多样化
  • 可移植能力强
  1. C++:面向对象语言代表
  • C with Classes
  • 继承
  • 权限控制
  • 虚函数
  • 多态

Lisp

函数式语言代表

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

JavaScript

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

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

二、编程范式

程序语言特性

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

常见编程范式:

  1. 命令式:面向过程、面向对象
  2. 声明式:函数式、响应式

过程式编程:

  • 自顶向下
  • 结构化编程

面向过程:

  1. 面向对象问题:数据与算法关联弱;不利于修改和扩充;不利于代码重用
  2. 面向对象编程:
  • 封装:关联数据与算法
  • 继承:无需重写的情况下进行功能扩充
  • 多态:不同的结构可以进行接口共享,进而达到函数复用
  • 依赖注入:去除代码耦合
  1. 面向对象编程五大原则:
  • 单一职责原则SRP
  • 开放封闭原则OCP
  • 里式替换原则LSP
  • 依赖倒置原则DIP
  • 接口分离原则ISP

函数式编程:

  • 函数是“第一等公民”

  • 纯函数 / 无副作用

  • 高阶函数 / 闭包

  • 函数式编程_First Class Function:聚合转发

  • 函数式编程_Pure Function:

   优势:可缓存、可移植、可测试、可推理、可并行
  • 函数式编程_Composition:手动组合
  • 函数式编程_Functor:可以当作容器的类型,类型支持对容器内元素进行操作
常见functor:Array(Iterable).map,Promise.then
  • 函数式编程_Monad:可以去除嵌套容器的容器类型
常见monad:Array.flatMap Promise.then
  • 函数式编程_Applicative:直接对两个容器直接操作
  • ldentity: Maybe(id).ap(v)=== V;
  • Homomorphism: Maybe(f).ap(Maybe(x))=== Maybe(f(x));
  • lnterchange: 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超集
  • 响应式编程_操作符:响应式编程的“compose”
  • 合并、过滤、转化、异常处理、多播
  • 响应式编程_Monad:去除嵌套的Observable

三、领域特定语言

Domain-specific language (DSL):应用于特定领域的语言

  • HTML
  • SQL

lexer:

  • SQL Token 分类:注释、关键字、操作符、空格、字符串、变量

Parser

  1. 语法规则:
  • 推导式:表示非终结符到(非终结符或终结符)的关系。
  • 终结符:构成句子的实际内容。可以简单理解为词法分析中的token
  • 非终结符:符号或变量的有限集合。它们表示在句子中不同类型的短语或子句。
  1. Parser_LL: LL:从左到右检查,从左到右构建语法树
  2. Parser_LR: LR:从左到右检查,从右到左构建语法树
  • LL(K) > LR(1) > LL(1)

tools

visitor