编程范式| 青训营笔记

68 阅读3分钟

本节课总的来说就是介绍了不同编程范式的起源和适用场景、需要让我们掌握JavaScript在不同的编程范式特别是函数式编程范式的使用、掌握创建领域特定语言的相关工具和模式。 简单的js JavaScript 是 单线程 语言,意味着只有单独的一个调用栈,同一时间只能处理一个任务或一段代码。队列、堆、栈、事件循环构成了 js 的并发模型,事件循环 是 JavaScript 的执行机制。

为什么js是一门单线程语言呢?最初设计JS是用来在浏览器验证表单以及操控DOM元素,为了避免同一时间对同一个DOM元素进行操作从而导致不可预知的问题,JavaScript从一诞生就是单线程。

既然是单线程也就意味着不存在异步,只能自上而下执行,如果代码阻塞只能一直等下去,这样导致很差的用户体验,所以事件循环的出现让 js 拥有异步的能力。

编程语言

机器语言--->汇编语言--->高级语言 如下图:

image.png

总的来说编程语言可分为机器语言、汇编语言、中级语言、高级语言

编程范式

啥是编程范式总的来说就是程序语言特性:

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

常见的编程范式

命令式

  • 面向过程
  • 面向对象

声明式

  • 函数式
  • 响应式

过程式编程

  • 自顶向下 image.png
  • 结构化编程 image.png

image.png JS中的面向对象

image.png

面向过程的问题

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

面向对象编程

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

面向对象编程_五大原则

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

面向对象编程缺点?为啥推荐使用函数式编程

简单的来说就是依赖性强,依赖于某个框架,确实拿到我们想要的东西,但是多了很多东西。

函数式编程的优势

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

响应式编程

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

    • 数据流
    • 操作符
      • 过滤
      • 合并
      • 转化
      • 高阶
  • 观察者模式

  • 迭代器模式

  • Promise/EventTarget 超集

响应式编程_操作符

响应式编程的 “compose”

  • 合并
  • 过滤
  • 转化
  • 异常处理
  • 多播
  • 去除嵌套的Observable

总结:

image.png

本节课接学到了某些领域的特定语言 比如HTML、SQL等

lexer

SQL Token分类

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

课程总结

编程范式:

  • 编程语言
    • 机器语言
    • 汇编语言
    • 中级语言 如C
    • 高级语言 C++、Lisp、Java Script
  • 编程范式
    • 什么是编程范式
    • 过程式编程
    • 面向对象编程
    • 函数式编程
    • 响应式编程
  • 领域特定语言
    • 创建SQL
      • lexer
      • parser
      • tools
      • visitor