编程范式 | 青训营笔记

122 阅读4分钟

791888746631560850.jpg

编程范式(Programming paradigm)

一、课程介绍

课程介绍

① 课程背景

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

② 课程收益

  1. 了解不同编程范式的起源和使用场景。
  2. 掌握JavaScript在不同的编程范式特别是函数式编程范式的使用。
  3. 掌握创建领域特定语言的相关工具和模式。

二、编程语言

① 为什么要使用编程语言

30989556125131205.jpg

② 机器语言

590584928866271196.jpg

399397317085611752.jpg

③ 汇编语言

226242575800844796.jpg

④ 高级语言

226242575800844796.jpg

1.C/C++

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

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

496364417285911594.jpg

163598790310959962.jpg

C/C++

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

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

368389837019341154.jpg

2.Lisp

Lisp:函数式语言代表

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

571193542661866961.jpg

3.JavaScript

  • 基于原型和头等函数的多范式语言
  • 过程式
  • 面向对象
  • 函数式
  • 响应式

438907957542305203.jpg

总结

573326468759213352.jpg

三、编程范式

① 什么是编程范式?

编程语言特性:

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

② 常见编程范式

编程范式:

  • 命令式
  1. 面向过程

  2. 面向对象

  • 声明式
  1. 函数式
  2. 响应式

③ 过程式编程

  • 自顶向下
  • 结构化编程

493092990487325542.jpg

1.自顶向下

  • 程序

模块

1.变量:数据结构

2.函数:函数,语句

276154193189455323.jpg

2.结构化编程

140199896847575317.jpg

④ JS中的面向过程

691358463093867211.jpg

⑤ 面向过程

思考一下

271966461122698105.jpg

1.面向过程的问题

  • 数据与算法关联弱
  • 不利于修改
  • 不利于代码重用
  • 没有面向对象易维护,易复用,易扩展等等优点

2.面向对象编程

  • ① 封装
  • ② 继承
  • ③ 多态
  • ④ 依赖注入*

1.封装:

  • 关联数据与算法

574277299525468749.jpg

2.继承:

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

222689668111829150.jpg

3.多态:

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

416633736023631919.jpg

4.依赖注入:

  • 去除代码耦合

30580336966765371.jpg

446817632173864125.jpg

5.五大原则

  • 单一职责原则
  • 开放封闭原则
  • 里氏替换原则
  • 依赖倒置原则
  • 接口分离原则

⑥ 面向过程

思考一下

890824134834754930.jpg

1.面向对象的问题

面向对象编程语言的问题在于,它总是附带着所有它需要的隐含环境。你想要一个香蕉,但得到的却是一个大猩猩拿着香蕉,而且还有整个丛林

2.函数式编程的优点

  • 简洁
  • 易于并发编程
  • 提高复用性和可扩展性好

⑦ 函数式编程

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

873722614833155874.jpg

1.函数式编程__First Class Function

782663935074960853.jpg

2.函数式编程__Pure Function

① 优势

  1. 可缓存
  2. 可移植
  3. 可测试
  4. 可推理
  5. 可并行

305647197360344288.jpg

3.函数式编程__Curring

671000100750807505.jpg

251548815424284691.jpg

4.函数式编程__Functor

可以当作容器的类型,类型支持对容器内元素进行操作

常见的functor:Array(iterable).map,Promise.then

480800668313819834.jpg

690315064800309358.jpg

5.函数式编程__Monad

可以去除嵌套容器的容器类型

常见的monad:Array.flatMap,Promise.then

592625638023587242.jpg

6.函数式编程__Composition

569991284938439969.jpg

7.函数式编程__Applicative

  • 对两个容器直接操作

145233357017610574.jpg

⑧ 响应式编程

607072683858957805.jpg

1.⑧.Observable

246999339940768959.jpg

2.⑧.操作符

402656738485821328.jpg

3.⑧.Monad

789322444175320695.jpg

总结一下:

编程范式:

1.过程式:

  • 自顶向下
  • 结构化编程
  • 问题

2.面向对象:

  • 封装
  • 继承
  • 多态
  • 原则
  • 问题

3.函数式编程:

  • 一等函数
  • 纯函数
  • curry/compose/functor/monard/applicative

4.响应式编程

  • observable
  • 操作符
  • monard

四、领域特定语言

① 什么是领域特定语言

849831485983871196.jpg

②.语言运行

740718246310999294.jpg

③.lexer

876280590044313464.jpg

④.lexer

334158148693419559.jpg

⑤.Parser__语法规则

357043001286608393.jpg

⑥.Parser_LL

9404341021638959.jpg

⑦.Parser_LR

67124943476555160.jpg

⑧.tools

151310164152743654.jpg

⑨.visitor

855248861744068099.jpg

课程总结

编程范式

1. 编程语言:

  • 机器语言
  • 汇编语言
  • 中级语言:C
  • 高级语言:C++,Lisp,JavaScript

2.编程范式:

  • 什么是编程范式
  • 过程式编程
  • 面向对象编程
  • 函数式编程
  • 响应式编程

3.领域特定语言:

  • 创造DSL:lexer,parser,tools,visitor

以上就是编程范式笔记的所有内容了,感谢大家的阅读~

777518076658566985.jpg