编程范式 | 青训营笔记

63 阅读2分钟

1 编程语言

发展:机器语言 => 汇编语言 => 高级语言

1.1 c语言

“中级语言”过程式语言代表
可对位字节和地址直接进行操作,有汇编语言的特点也有高级语言的特点
功能齐全
可移植性强

1.2 c++

面向对象语言代表 有了继承,虚函数,多态的概念

1.3 Lisp

函数式语言的代表
操作与机器无关
有了闭包的概念
代码即数据

1.4 javaScript

  • 多范式语言
  • 面向对象
  • 函数式
  • 响应式

2 编程范式

程序语言特性:

  • 是否允许副作用
  • 操作执行顺序
  • 代码组织
  • 状态管理
  • 语法和词法

编程范式

命令式:

  • 面向过程:自顶向下、结构化编程
  • 面向对象:封装、继承、多态、依赖注入

声明式:

  • 函数式
  • 响应式

面向过程问题:

  • 数据关联弱
  • 不利于修改和扩充
  • 不利于代码重用
    面向对象的依赖注入:
    image.png

面向对象五大原则:

  • 单一职责原则SRP
  • 开闭原则OCP
  • 里氏替换原则LSP
  • 依赖倒置原则DIP
  • 接口分离原则ISP

面向对象问题:

  • 它总附带着所有它需要的隐含环境

函数式编程

  • 函数是“第一等公民”
  • 纯函数、无副作用
  • 高阶函数、闭包
    常见的函数式
  • currying image.png
  • Functor:不用考虑所有原子的异常情况,把异常和处理逻辑写到容器中去。
  • Monad:可以去除嵌套容器的容器类型。例如:Array.flatMap Promise.then
  • Application:直接对两个容器直接操作

响应式编程

借助RXjs来实现

  • Observable image.png
  • Monad:去除嵌套的Observable image.png

总结

image.png

语言运行

image.png lexer:词法解析器,解析成各种短语
parser:语法解析器,转化成语法书
visit:对语法树进行遍历分析转化成机器语言(编译)

lexer

作用:将语言转化为有意义的token
例如:SQL Token分类:

  • 注释
  • 关键字
  • 操作符
  • 空格
  • 字符串
  • 变量

Parser语法规则

上下文无关的语法规则

  • 推导式:表示非终结符到(非终结符或终结符)的关系。
  • 终结符:构成句子的实际内容。可以简单理解为词法分析中的token。
  • 非终结符:符号或变量的有限集合。它们表示在句子中不同类型的短语或子句。

parser_LL:从左到右检查,从左到右构建语法树

image.png

parser_LR:从左到右检查,从右到左构建语法树

image.png

visitor

image.png

总结

image.png