编程范式 | 青训营笔记

72 阅读5分钟

课程介绍

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

课程背景

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

课程收益

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

编程语言

机器语言

image.png

汇编语言

image.png

  • 汇编语言(1950年代中期):为了使程序员能够更容易地编写代码,汇编语言被发明了出来。汇编语言是一种更高级别的机器语言,使用助记符来代替二进制代码,使程序员能够更容易地编写和阅读代码

高级语言

image.png

C语言

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

C++语言

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

Lisp

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

JavaScript

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

总结

image.png

编程范式

程序语言特性

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

编程范式

  • 命令式
  1. 面向对象
  2. 面向过程
  • 声明式
  1. 函数式
  2. 响应式
  • 过程式编程
  • 结构化编程
  • JS中的面向过程

面向对象

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

封装

  • 将数据和行为封装在一个对象中,通过访问控制来保护对象的数据和行为,防止外部对象直接访问和修改
  • 封装的目的是隐藏对象的实现细节,提供一个统一的接口来访问对象的数据和行为,增加对象的安全性和可靠性,同时也提高了程序的可维护性和可扩展性

继承

多态

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

  • 基于上面的Person类和Student类,创建了一个printInfo函数,用于打印对象的信息。这个函数接受一个Person或Student对象作为参数,根据对象的类型,打印不同的信息

  • 我们定义了一个printInfo函数,用于打印对象的信息。这个函数接受一个Person或Student对象作为参数,根据对象的类型,打印不同的信息。在函数中,我们使用了instanceof关键字,判断对象的类型,实现了多态

面向对象编程的五大原则

  • 单一职责原则SRP(Single Responsibility Principle)

    • 一个类只负责一个功能领域中的相应职责,或者可以定义为一个类只有一个引起它变化的原因。这个原则的目的是将职责分离,提高类的内聚性,降低类的耦合性,使得代码更加灵活、可维护和可扩展
  • 开放封闭原则OCP(Open-Close Principle)

    • 一个软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这个原则的目的是使得代码更加灵活、可扩展和可维护,同时也能降低代码的风险和复杂度。通过使用抽象化和多态等技术,使得代码能够适应不同的需求和变化
  • 里式替换原则LSP(the Liskov Substitution Principle LSP)

    • 所有引用基类(父类)的地方必须能透明地使用其子类的对象。这个原则的目的是保证代码的正确性和可靠性,避免在子类中破坏父类的行为和逻辑。通过遵循这个原则,可以使得代码更加灵活、可扩展和可维护
  • 依赖倒置原则DIP(the Dependency Inversion Principle DIP)

    • 高层模块不应该依赖于底层模块,两者都应该依赖于抽象;抽象不应该依赖于具体实现,具体实现应该依赖于抽象。这个原则的目的是降低代码的耦合性,提高代码的灵活性和可扩展性。通过使用接口和抽象类等技术,使得代码能够适应不同的需求和变化
  • 接口分离原则ISP(the Interface Segregation Principle ISP)

    • 一个类不应该依赖于它不需要的接口,一个类应该只依赖于它需要的接口。这个原则的目的是降低代码的耦合性,提高代码的灵活性和可扩展性。通过将接口进行分离,使得代码更加灵活、可维护和可扩展

函数式编程

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

响应式编程

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

    • 数据流

    • 操作符

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

领域特定语言

语言运行

image.png

lexer

SQL Token分类

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

parser语法规则

  • 推导式:表示非终结符到(非终结符或终结符)的关系。
  • 终结符:构成句子的实际内容。可以简单理解为词法分析中的token.
  • 非终结符:符号或变量的有限集合。它们表示在句子中不同类型的短语或子句。