背景
前端的主要编程语言是JavaScript,它融合了多种编程范式,灵活性高。开发人员需要根据场景在不同编程范式间切换,要创造领域特定语言抽象业务问题
编译语言
机器语言
老师举例8086机器语言是操作码+操作数
注:8086是指Intel 8086,是x86架构的鼻祖,1978出的,我没用过
编译语言
原理
字母代替操作码的数字,方便输入和检查;且相同的字母在不同机器可以转换成不同的数字,提高可移植性
高级语言
进一步贴近自然语言,进一步提高可移植性,高级语言通过编译器转换成汇编语言
例子:C语言(面向对象)、Lisp(函数式)、JavaScript(多范式语言)
总结
编程范式
分类
命令式
面向过程
- 自顶向下 程序→模块→(变量、函数)
- 结构化编程 顺序结构 选择结构 循环结构
面向过程缺点
- 数据与算法关联弱
- 不利于修改和扩充
- 不利于代码重用
面向对象
- 封装 把变量和函数关联起来,用户使用时只要引用封装就行
- 继承 一个对象继承父对象的变量和函数,不需重写即可进行功能扩充
- 多态 接口可供多个结构引用,就是函数复用
- 依赖注入 不在结构内主动创建对象,降低耦合性,同时可以用构筑器、接口等注入依赖,让结构内能使用对象的功能
五大原则
- 单一职责原则:一个对象结构只负责一两个功能,不能搞太复杂来降低效率
- 开放封闭原则:对拓展功能开放,对修改内容封闭
- 里式替换原则:子对象继承父对象
- 依赖倒置原则:把高层对细节实现效果的依赖转换成高层对内部接口的依赖,内部接口再由细节实现
- 接口分离原则:细化接口,接口任务单一,不要臃肿,与单一职责原则有点相似
面向对象缺点
课上老师用了一个抽象的例子说明,你引用一个对象的函数,就好比你要一根香蕉,结果却得到了一个拿着香蕉的猴子和猴子所在的林子,我理解是面向对象容易牵一发而动全身
声明式
函数式编程
- First Class Function
- Pure Function
- Currying
- Composition
- Functor
- Monad
- Applicative
响应式编程
领域特定语言
语言运行
Lexer词法分析
Parser语法解析
语法规则 生成语法树
Tools
用工具箱,比如数学什么的
visitor
执行
DSL总结
学习编译原理