前言:
JavaScript 作为一种融合了多种编程范式的语言,灵活性非常高。前端开发人员需要根据场景在不同编程范式间自如切换。进一步需要创造领域特定语言抽象业务问题。
重点内容:
- 编程语言:
- 机器语言
- 汇编语言
- 中级语言
- 高级语言
- 编程范式:
- 过程式
- 面向对象
- 函数式编程
- 响应式编程
- 构建领域特定语言:
- 词法解析
- 语法分析
- 工具生成
- 解释与编译
详细知识点介绍:
编程语言:
- 机器语言
- 汇编语言
- 中级语言:
- 面向过程代表: C
- 高级语言:
- 面向对象代表:C++
- 函数式代表:lisp
- 多范式代表:JavaScript
C 语言(过程式语言代表):
- 可对位,字节,地址直接操作
- 代码和数据分离倡导结构化编程
- 功能齐全:数据类型和控制逻辑多样化
- 可移植能力强
C++(面向对象语言代表):
- C with Classes
- 继承
- 权限控制
- 虚函数
- 多态
Lisp(函数式语言代表):
- 与机器无关
- 列表:代码即数据
- 闭包
JavaScrip(基于原型和头等函数的多范式语言):
- 过程式
- 面向对象
- 函数式
- 响应式
编程范式:
何为编程范式:
程序语言特性:
- 是否允许副作用
- 操作的执行顺序
- 代码组织
- 状态管理
- 语法和词法
常见编程范式:
常见的编程范式有两种:
- 声明式:函数式、响应式
- 命令式:面向对象、面向过程
面向过程式编程的劣势:
- 数据与算法关联弱
- 不利于修改和拓充
- 不利于代码重用
面向对象编程:
- 封装:关联数据与算法
- 继承:无需重写的情况下进行功能拓充
- 多态:不同的结构会进行接口共享,进而达到函数复用
- 依赖注入:去除代码耦合
面向对象编程五大原则:
- 单一职责原则 SRP
- 开放封闭原则 OCP
- 里式替换原则 LSP
- 依赖倒置原则 DIP
- 接口分离原则 ISP
面向对象劣势:
Erlang创始人对于面向对象的评价为:它总是附带着所有它需要的隐含环境。要一个香蕉,会得到一个大猩猩拿着香蕉,并且附带整个丛林
函数式编程:
- 函数是“第一等公民”
- 纯函数/无副作用
- 高阶函数/闭包
优势:可缓存、可移植、可测试、可推理、可并行
响应式编程:
- observable
- 操作符
- monard
何为领域特定语言:
Domain-specific language (DSL):应用于特定领域的语言:
- HTML
- SQL
Parser 语法规则:
上下文无关语法规则:
- 推导式:表示 非终结符 到 (非终结符或终结符)的关系
- 终结符:构成句子的实际内容。可以理解为词法分析中的token
- 非终结符:符号或变量的有限集合。表示在句子中不同类型的短语或子句