编程范式|青训营笔记

78 阅读3分钟

编程范式

课程介绍

课程背景:

  1. 前端的主要编程语言为JavaScript

  2. JavaScript作为一种融合了多种编程范式的语言,灵活性非常高。

  3. 前端开发人员需要根据场景在不同编程范式间自如切换。

  4. 进一步需要创造邻域特定语言抽象业务问题。

课程收益:

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

编程语言

为什么要编程语言

我们使用编程语言(指令)来与机器进行沟通,

机器语言

使用数字输入

汇编语言

使用字母代替输入

高级语言

为了更加贴近人类的思维,使用高级语言转为汇编再转为机器语言

C/C++

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

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

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

  • 相对C增加了类的概念
  • 继承
  • 权限控制
  • 虚函数
  • 多态

Lisp:函数式语言代表

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

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

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

编程范式

image-20230418201700491.png

常见编程范式

image-20230418201730211.png

过程式编程

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

image-20230418201928274.png

JS中的面向过程

image-20230418202023486.png

面向过程问题

  • 数据与算法关联弱

  • 不利于修改和扩充

  • 不利于代码重用

面向对象编程

  • 封装
  • 继承
  • 多态
  • 依赖注入
封装
  • 关联数据与算法

image-20230418202352753.png

继承

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

image-20230418202416531.png

在扩充的过程中不需要对原有的类进行改变

多态

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

image-20230418202513346.png

依赖注入

去除代码耦合

image-20230418202650010.png

image-20230418202548940.png

面向对象编程-五大原则
  • 单一职责原则SRP
  • 开放封闭原则OCP
  • 里式替换原则LSP
  • 依赖倒置原则DIP
  • 接口分离原则ISP

面向对象编程缺点

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

函数式编程

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

pure Function

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

Currying

image-20230418203514548.png

image-20230418203523441.png

Composition

image-20230418203656311.png

image-20230418203729026.png

image-20230418203746263.png

Functor

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

Monad

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

Applicative

直接对两个容器直接操作

响应式编程

  • 异步/离散的函数式编程
    • 数据流
    • 操作符
      • 过滤
      • 合并
      • 转化
      • 高阶

Observable

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

操作符

响应式编程的compose

Monad

邻域特定语言

HTML

SQL

语言运行

image-20230418205007074.png