编程范式 | 青训营笔记

104 阅读3分钟

前言:

JavaScript 作为一种融合了多种编程范式的语言,灵活性非常高。前端开发人员需要根据场景在不同编程范式间自如切换。进一步需要创造领域特定语言抽象业务问题。

重点内容:

  • 编程语言
  1. 机器语言
  2. 汇编语言
  3. 中级语言
  4. 高级语言
  • 编程范式
  1. 过程式
  2. 面向对象
  3. 函数式编程
  4. 响应式编程
  • 构建领域特定语言
  1. 词法解析
  2. 语法分析
  3. 工具生成
  4. 解释与编译

详细知识点介绍:

编程语言:

  • 机器语言
  • 汇编语言
  • 中级语言
  1. 面向过程代表: C
  • 高级语言
  1. 面向对象代表:C++
  2. 函数式代表:lisp
  3. 多范式代表:JavaScript

C 语言(过程式语言代表):

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

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

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

Lisp(函数式语言代表):

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

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

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

编程范式:

何为编程范式:

程序语言特性:

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

常见编程范式:

常见的编程范式有两种:

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

面向过程式编程的劣势:

  • 数据与算法关联弱
  • 不利于修改和拓充
  • 不利于代码重用

面向对象编程:

  • 封装:关联数据与算法
  • 继承:无需重写的情况下进行功能拓充
  • 多态:不同的结构会进行接口共享,进而达到函数复用
  • 依赖注入:去除代码耦合

面向对象编程五大原则:

  1. 单一职责原则 SRP
  2. 开放封闭原则 OCP
  3. 里式替换原则 LSP
  4. 依赖倒置原则 DIP
  5. 接口分离原则 ISP

面向对象劣势:

Erlang创始人对于面向对象的评价为:它总是附带着所有它需要的隐含环境。要一个香蕉,会得到一个大猩猩拿着香蕉,并且附带整个丛林

函数式编程:

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

优势:可缓存、可移植、可测试、可推理、可并行

响应式编程:

  • observable
  • 操作符
  • monard

何为领域特定语言:

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

  • HTML
  • SQL

Parser 语法规则:

上下文无关语法规则

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