编程语言
-
机器语言(直接输入数字)
-
汇编语言(字母代替数字)
-
中级语言
-
高级语言
C:"中级语言"过程式语言代表
-
可对位,字节,地址直接操作
-
代码和数据分离倡导结构化编程
-
功能齐全:数据类型和控制逻辑多样化
- 声明整型变量
x和字符指针变量str,使用了printf函数进行输出
- 声明整型变量
-
可移植能力强
- 代码中使用了标准输入输出库,这使得代码可以在不同的平台上运行
C++:面向对象语言代表
-
C with Classes
- C++最初是作为C语言的一种扩展,其基本语法与C语言相同,但增加了类、继承、多态等面向对象的特性
-
继承
-
权限控制
-
虚函数
-
多态
Lisp:函数式语言代表
- 与机器无关
- 列表:代码即数据
- 闭包
JavScript:基于原型和头等函数的多范式语言
- 过程式
- 面向对象
- 函数式
- 响应式
编程范式
- 过程式
- 面向对象
- 函数式编程
- 响应式编程
程序语言特性
- 是否允许副作用
- 操作的执行顺序
- 代码组织
- 状态管理
- 语法和词法
常见编程范式
命令式:面向过程、面向对象
面向过程问题
-
数据与算法关联弱
-
不利于修改和扩充
-
不利于代码重用
面向对象编程
-
封装(关联数据与算法)
-
继承(无需重写的情况下进行功能扩充)
-
多态(不同的结构可以进行接口共享,进而达到函数复用)
-
依赖注入(去除代码耦合)
五大原则
- 单一职责原则SRP
- 开放封闭原则OCP
- 里氏替换原则LSP
- 依赖倒置原则DIP
声明式:函数式、响应式
面向对象编程问题 总是附带着所有它需要的隐含环境
函数式编程
- 函数是”第一等公民“
- 纯函数/无副作用
- 高阶函数/闭包
优势
-
可缓存
-
可移植
-
可测试
-
可推理
-
可并行
functor
- 可做容器的类型,类型支持对容器内元素进行操作
- 常见functor:Array(lterable).map,Promise.then
Monad
- 可去除嵌套容器的容器类型
- 常见Monad:Array.flatMap Promise.then
Applicative
- 直接对两个容器进行操作
- Identity:Maybe(id).ap(v) === v;
- Homomorphism:Maybe(f).ap(Maybe(x))===Maybe(f(x));
- Interchange:v.ap(Maybe(x))=== Maybe(f=>f(x)).ap(v));
- Composition:Maybe(compose).ap(u).ap(v).ap(w) ===u.ap(v.ap(w));
响应式编程
异步/离散的函数时编程
- 数据流
- 操作符
- 过滤
- 合并
- 转化
- 高阶
observable
- 观察者模式
- 迭代器模式
- Promise/EventTarget超集
操作符 响应式编程的compose
- 合并
- 过滤
- 转化
- 异常处理
- 多播
Monad
- 去除嵌套的Observable
过程式:自顶向下、结构化编程
语言运行
lexer
SQL Token分类
- 注释
- 关键字
- 操作符
- 空格
- 字符串
- 变量
Parser语法规则