课程背景
- 前端的主要编程语言为JavaScript
- Javascript作为一种融合了多种编程范式的语言,灵活性非常高
- 前端开发人员需要根据场景在不同编程范式间自如切换
- 进一步需要创造领域特定语言抽象业务问题
编程语言
机器语言 汇编语言 高级语言
- C:“中级语言”过程式语言代表
- C++:面向对象语言代表
- Lisp:函数式语言代表
- Javascript:基于原型和头等函数的多范式语言
编程范式
命令式
- 面向过程
- 面向对象
声明式
- 函数式
- 响应式
过程式编程 过程式编程(Procedural programming)的核心在于模块化,在实现过程中使用了状态,依赖了外部变量,导致很容易影响附近的代码,可读性较低,后期的维护成本也较高。
- 自顶向下
- 结构化编程
-
- 顺序结构
-
- 选择结构
-
- 循环结构
面向对象编程 面向对象编程(Object-oriented programming)的核心在于抽象,提供清晰的对象边界。结合封装、集成、多态特性,降低了代码的耦合度,提升了系统的可维护性。C++ 和 之后的 Java 成为主流。
- 封装:关联数据与算法
- 继承:无需重写的情况下进行功能扩充
- 多态:不同的结构可以进行接口共享,进而达到函数复用
- 依赖注入:去除代码耦合
五大原则
- 单一职责原则
- 开放封闭原则
- 里氏替换原则
- 依赖倒置原则
- 接口分离原则
函数式编程
函数式编程(Functional Programming)的核心在于“避免副作用”,不改变也不依赖当前函数外的数据。结合不可变数据、函数是第一等公民等特性,使函数带有自描述性,可读性较高。
领域特定语言
lexer
SQL Token分类
- 注释
- 关键字
- 操作符
- 空格
- 字符串
- 变量
Parser语法规则
上下文无关语法规则
- 推导式:表示非终结符到(非终结符或终结符)的关系
- 终结符:构成句子的实际内容
- 非终结符:符号或变量的有限集合
- LL:从左到右检查,从左到右构建排列树
- LR:从左到右检查,从右到左构建排列树