课程介绍
课程前景
- 前端的主要编程语言为JavaScript.
- JavaScript做为一种融合了多种编程范式的语言,灵活性非常高。
- 前端开发人员需要根据场景在不同编程范式间自如切换。
- 进一步需要创造领域特定语言抽象业务问题。
课程收益
- 了解不同编程范式的起源和适用场景。
- 掌握JavaScript在不同的编程范式特别是函数式编程范式的使用。
- 掌握创建领域特定语言的相关工具和模式。
编程语言
机器语言
汇编语言
高级语言
C/C++
C:"中级语言"过程式语言代表
- 可对位、字节、地址直接操作
代码中的*(&x) = 20;语句可以直接修改变量x的值,说明C语言可以对位、字节、地址进行直接操作 - 代码和数据分离倡导结构化编程
代码中的#include <stdio.h>语句引入了标准输入输出库,说明C语言倡导代码和数据分离,支持结构化编程 - 功能齐全:数据类型和控制逻辑多样化
代码中声明了整型变量x和字符指针变量str,使用了printf函数进行输出,说明C语言的数据类型和控制逻辑非常多样化,功能齐全 - 可移植能力强
代码中使用了标准输入输出库,这使得代码可以在不同的平台上运行,说明C语言具有很强的可移植能力
C++:面向对象语言代表
- C with Classes
C++最初是作为C语言的一种扩展,其基本语法与C语言相同,但增加了类、继承、多态等面向对象的特性,因此C++也被称为C with Classes - 继承
代码中的class Student : public Person语句定义了一个Student类,它继承自Person类,这说明C++支持继承的特性 - 权限控制
代码中的public、protected和private关键字用来控制成员变量和成员函数的访问权限,这说明C++支持权限控制的特性 - 虚函数
代码中的virtual void sayHello()语句定义了一个虚函数,这说明C++支持虚函数的特性。虚函数可以实现多态,即在运行时根据对象的实际类型来调用相应的函数 - 多态
代码中的void sayHello() override语句实现了函数的重写,这说明C++支持多态的特性。在运行时,如果调用的函数是虚函数,那么实际调用的函数将根据对象的实际类型来确定
Lisp:函数式语言代表
- 与机器无关
- 列表:代码即数据
- 闭包
JavaScript:基于原型和头等函数的多范式语言
- 过程式
- 面向对象
- 函数式
- 响应式
总结
编程范式
什么是编程范式
常见的编程范式
过程式编程
- 自顶向下
- 结构化编程
JS中的面向过程
面向对象编程
- 封装
关联数据与算法
- 继承
无需重写的情况下进行功能补充
- 多态
不同的结构可以进行功能共享,进而达到函数复用
- 依赖注入*
去除代码耦合
面向对象编程_五大原则
- 单一职责原则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)
函数特点
- 函数是"一等公民"
- 纯函数/无副作用
- 高阶函数跟闭包
优势
- 可缓存
- 可移植
- 可测试
- 可推理
- 可并行
响应式编程
-
异步/离散的函数式编程
-
数据流
-
操作符
- 过滤
- 合并
- 转化
- 高阶
-
总结
领域特定语言
SQL Token分类
- 注释
- 关键字
- 操作符
- 空格
- 字符串
- 变量
Parser_语法规则
上下文无关语法规则
- 推导式:表示非终结符到(非终结符或终结符)的关系。
- 终结符:构成句子的实际内容。可以简单理解为词法分析中的token.
- 非终结符:符号或变量的有限集合。它们表示在句子中不同类型的短语或子句。