4.编程范式 | 青训营笔记

23 阅读2分钟

编程范式

①课程介绍

  1. 课程背景

image.png

  1. 课程收益

image.png

②编程语言

1.编程语言的必要性

与计算机进行交互(instruction)

image.png

2.机器语言

  • 二进制
  • 8086

介质

image.png

3.汇编语言

image.png

4.高级语言

高级语言-汇编语言-机器语言

(1)C/C++

C:

image.png

C++:

image.png

(2)Lisp

介绍:

image.png

例子:

image.png

(3)JavaScript

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

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

③编程范式

1. 介绍

程序语言的特性

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

2. 常见编程范式

命令式:

面向过程
面向对象

声明式:

函数式
响应式

3. 过程式编程

(1)介绍

  • 自项而下

image.png

  • 结构化编程

image.png

(2)举例

js中的面向过程

image.png

(3)存在的问题

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

4.面向对象编程

  • 封装
  • 继承
  • 多态
  • 依赖注入

(1)封装

  • 关联数据和算法(进行了保护)

image.png

(2)继承

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

image.png

(3)多态

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

image.png

image.png

(4)依赖注入

  • 去除代码耦合

image.png image.png

(5)五大原则

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

(6)存在的问题

可能导致引入不必要的内的内容,数据的修改被隐藏

image.png

5.函数式编程

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

(1) First Class Function

聚合转发

image.png

(2) Pure Function

优势:

  • 可缓存
  • 可移植
  • 可测试
  • 可推理
  • 可并行

(3) Currying

image.png

(4) Composition

image.png

(5) Functor

可以当作容器的类型,类型支持对容器内元素进行操作
常见functor:Array(Iterable).mao,Promise.then

image.png

(6) Monad

可以去除嵌套容器的容器类型
常见monad:

Array.flayMap Promise.then

实例

image.png

(7) Applicative

直接对两个容器直接操作

image.png

6.响应式编程

异步/离散的函数式编程

  • 数据流

  • 操作符

  • 过滤
  • 合并
  • 转化
  • 高阶

示例

image.png image.png

(1) Observable

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

image.png image.png

(2) 操作符

响应式编程的 "compose"

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

image.png

(3) Monad

去除嵌套的Observable

image.png

④领域特定语言

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

HTML
SQL

与通用语言区分

General-purpose language

C/C++
JavaScript
...

1.语言运行

image.png

2.lexer

SQL Token分类

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

image.png 切分为有意义的短语
image.png

3.Parser_语法规则

image.png

4.Parser_LL

image.png

5.Parser_LR

image.png

6.tools

image.png

7.visitor

image.png