编程范式 | 青训营笔记

31 阅读3分钟

前言

JavaScript 作为一种融合了多种编程范式的语言,灵活性非常高。前端开发人员需要根据场景在不同编程范式间自如切换。进一步需要创造领域特定语言抽象业务问题。 本次课程会帮助你了解不同编程范式的起源和适用场景。掌握 JavaScript 在不同的编程范式特别是函数式编程范式下的使用。进一步帮助你掌握创建领域特定语言的相关工具和模式。

编程语言

C/C++

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

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

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

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

Lisp

Lisp:函数式语言代表

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

image.png

JavaScript

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

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

编程范式

什么是编程范式

根据编程语言特性,可以分为:是否允许副作用、操作的执行顺序、代码组织、状态管理和语法和词法。

常见的编程范式

可以分为命令式和声明式,其中命令式包括面向过程和面向对象;而声明式则包含了函数式和响应式。

面向过程问题

  • 数据与算法关联弱.

  • 不利于修改和扩充

  • 不利于代码重用

面向对象编程的五大原则

  1. 单一职责原则SRP(Single Responsibility Principle)
  2. 开放封闭原则0CP(Open - Close Principle)
  3. 里式替换原则LSP(the Liskov Substitution Principle LSP)
  4. 依赖倒置原则DIP(the Dependency Inversion Principle DIP)
  5. 接口分离原则ISP(the Interface Segregation Principle ISP)

面向对象的问题

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

函数式编程的优势

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

响应式编程

具体流程为: 异步/离散的函数式编程分为数据流和操作符;而操作符又可以细化为过滤、合并、转化、高阶。

领域特定语言

什么是领域特定语言

Domain-specific language (DSL):应用于特定领域的语言,包括HTML、SQL语言等;相对的,普遍语言(General-purpose language)有C/C++、Javascript等。

image.png

Parser_语法规则

上下文无关语法规则

<selectStatement> ::= SELECT <selectList> FROM <tableName>

<selectList> ::= <selectField> [,<selectList> ]

<tableName> ::= <tableName> [,<tableList> ]    
  1. 推导式:表示非终结符到(非终结符或终结符)的关系。

  2. 终结符:构成句子的实际内容。可以简单理解为词法分析中的token。

  3. 非终结符:符号或变量的有限集合。它们表示在句子中不同类型的短语或子句。

其他

今天的课程就到这里啦,我们下次课见!

(ps:今天你有快乐学习了吗~)