编程范式|青训营笔记

142 阅读3分钟

01课程介绍

课程背景

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

课程收益

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

02编程语言

为什么需要编程语言

把人类的指令转换成机器能听懂的指令

机器语言

汇编语言

高级语言

把高级语言转换成汇编语言再转换成机器语言

C/C++

c语言是过程式语言

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

C++是面向对象的语言代表

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

Lisp

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

javasrcipt

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

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

总结

image-20230416152328092.png

# 03编程范式

什么是编程范式

image-20230416152459177.png

常见编程范式

image-20230416152617142.png

过程式编程两大特点

  • 自顶向下

    • image.png

  • 结构化编程

    • 顺序结构
    • 选择结构
    • 循环结构

JS中的面向过程

image.png

面向过程

面向过程式编程有什么特点?

为什么后面会出现面向对象?

面向过程问题

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

面向对象编程

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

面向对象编程_五大原则

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

面向过程

面向对象编程有什么缺点?

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

为什么我们推荐函数式编程?

函数式编程

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

函数式编程_Pure Function

优势

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

函数式编程_Functor

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

函数式编程_Monad

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

函数式编程_Applicative

直接对两个容器直接操作

响应式编程

  • 异步/离散的函数式编程

    • 数据流

    • 操作符

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

响应式编程_Observable

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

响应式编程_操作符

响应式编程的“compose”

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

响应式编程_Monad

取出嵌套的Observable

总结

image.png

04领域特定语言

领域特定语言(domain-specific language)(DSL)是一种旨在特定领域下的上下文的语言。这里的领域是指某种商业上的(例如银行业、保险业等)上下文,也可以指某种应用程序的(例如 Web 应用、数据库等)上下文。与之相比的另一个概念是 通用语言(general-purpose language) (GPL,LCTT 译注:注意不要和 GPL 许可证混淆),通用语言则可以广泛应用于各种商业或应用问题当中。

创造DSL

  • lexer
  • parser
  • tools
  • visitor

附录

src=http___c-ssl.duitang.com_uploads_item_201807_13_20180713114316_mkkoe.thumb.400_0.gif&refer=http___c-ssl.duitang.gif