02编程语言
- 机器语言:不同的机器有不同的语言
- 汇编语言:使用字母代替数字,具有一定的可移植性
- 高级语言:高级语言具有一定的逻辑性,先将高级语言转变为汇编语言,再转化为机器语言
- 回忆一些高级语言:c /c++
- javaScript: 基于原型和头等函数的多范式语言
03编程范式
定义
- 命令式:
- 面向过程
- 面向对象
- 声明式:
- 函数式
- 响应式
过程式编程
- 自顶向下
面向对象编程
- 依赖注入(DI) 这是一种设计模式,作用是去除类之间的依赖关系,实现松耦合,便于开发测试。 例如:A类要依赖B类,A类不再直接创建B类,而是把这种依赖关系配置在外部xml文件(或java config文件)中。
面向对象编程 五大原则
- 单一职责原则
- 开放封闭原则
- 里式替换原则
如果S是T类的子类,对于S类的任意对象,如果将他们看做是T类型的对象,那么该对象的行为理应与期望中的一致。- 与期望一致的替换:
不管是哪种派生类的实现,都与接口或者基类方法的期望行为一致;通俗来讲,就是他们遵守同一种规则,子类在父类的规则下实现方法。 - 违反此规则带来的危害:
反直觉,不可读,不可用
- 倒置原则 :
- 在设计代码结构时,高层模块不应该依赖底层模块,二者都应该依赖其抽象。
- 抽象不应该依赖细节,细节应该依赖抽象。通过依赖倒置,减少类与类之间的耦合性,提高系统稳定性,提高代码的可读性和可维护性,减少修改程序造成的风险。
- 接口分离原则 :将大接口按人类的逻辑拆分为一个一个小接口,客户端只使用自己需要的接口来实例化对象。
函数式编程
- 函数是第一等公民
- 纯函数无副作用
- 高阶函数(闭包)
- 优势(鼓励纯函数)
- 不依赖外部环境,不改变外部环境
- 可缓存,移植,测试,推理,并行
- Currying
- 解决参数重复传入问题
- 将一些重复的参数放入闭包中,在下次传参时直接传入新的参数
- 组合
- 利用一些规则,对代码进行优化简洁
- Functor
- 可以当做容器类的操作,支持对容器内元素进行操作
- 将一些操作封装到容器中,通过容器进行操作
- Monad
- 去除嵌套容器的容器类型
- Applicative
- 直接对两个容器直接操作
响应式编程
- Observeable
- 观察者模式
- 迭代器模式
- 超集
- 操作符
- 操作符构成数据管道,对数据进行转换,合并,过滤,异常处理,多播
- Monad
- 去除嵌套的Observeable
领域特定语言
应用于特定场景的语言
语言运行
- lexer
- Parser语法规则
- 上下文无关的语法规则
- Parser_LL:从右到左检查,从右到左构建语法树
- Parser_LR:从左到右检查,从右到左构建语法树
- tools
- visitor