编程范式 | 青训营笔记

148 阅读3分钟

一、编程语言

  • 机器语言
  • 汇编语言
  • 中级语言
  • 高级语言

01-机器语言

  • 机器能直接识别的程序语言或指令代码,无需经过翻译,每一操作码在计算机内部都有相应的电路来完成它,或指不经翻译即可为机器直接理解和接受的程序语言或指令代码。
  • 不同的计算机都有各自的机器语言,即指令系统。从使用的角度看,机器语言是最低级的语言。

image.png

02-汇编语言

  • 使用字母代替数字,方便输入,不同的字母在不同的机器架构下可以转化成不同的数字,具有一定的可移植性

image.png

03-高级语言

  • 进一步提高可移植性,出现了高级语言
  • 贴近人类的思维,就出现了编译器

image.png

常见的高级语言

  • C:"中级语言"过程式语言代表

    • 可对位,字节,地址直接操作
    • 代码和数据分离倡导结构化编程
    • 功能齐全︰数据类型和控制逻辑多样化
    • 可移植能力强
  • C++:面向对象语言代表

    • C with Classes
    • 继承
    • 权限控制
    • 虚函数
    • 多态
  • Lisp:函数式语言代表

    • 与机器无关
    • 列表:代码即数据
    • 闭包
  • JavaScript

    • 基于原型和头等函数的多范式语言
    • 过程式
    • 面向对象
    • 函数式
    • 响应式

image.png

二、编程范式

  • 过程式
  • 面向对象
  • 函数式编程
  • 响应式编程

01-过程式编程

  • 自顶向下

image.png

  • 结构化编程

image.png

02-面向对象

  • JS中的面向过程

image.png

  • 面向过程问题

    • 数据与算法关联弱
    • 不利于修改和扩充
    • 不利于代码重用
  • 面向对象编程

  1. 封装

image.png

2.继承

image.png

3.多态

接口复用

image.png

image.png

4.依赖注入

image.png

面向对象编程_五大原则

  • 单一职责原则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 lSP)

面向对象问题

面向对象编程语言的问题在于,它总是附带着所有它需要的隐含环境。你想要一个香蕉,但得到的却是一个大猩猩拿着香蕉,而且还有整个丛林。

03-函数式编程

  • 函数是“第一等公民”
  • 纯函数/无副作用
  • 高阶函数/闭包

image.png

First class Function

image.png

Pure Function

优势

  • 可缓存
  • 可移植
  • 可测试
  • 可推理
  • 可并行

image.png

Currying

image.png

image.png

image.png

Composition

image.png

Functor

可以当做容器的类型,类型支持对容器内元素进行操作

常见的functor : Array (lterable).map,Promise.then

image.png

image.png

Monad

可以去除嵌套容器的容器类型

常见monad: Array.flatMap Promise.then

image.png

Applicative

直接对两个容器直接操作

image.png

image.png

04-响应式编程

异步/离散的函数式编程

  • 数据流
  • 操作符
    • 过滤
    • 合并
    • 转化
    • 高阶

Observable

  • 观察者模式
  • 迭代器模式
  • Promise/EventTarget超集

image.png

image.png

操作符

  • 响应式编程的“compose”
  • 合并
  • 过滤
  • 转化
  • 异常处理
  • 多播

image.png

Monad

  • 去除嵌套的Observable

image.png

小结

image.png

三、领域特定语言

领域特定语言 image.png

语言运行

image.png

lexer

SQL Token分类

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

image.png

Parser_语法规则

上下文无关语法规则

<selectStatement> ::= SELECT <selectList> FROM <tableName>

<selectList> ::= <selectField> [ , <selectList> ]

<tableName> ::= <tableName> [ , <tableList> ]

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

Parser_LL

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

image.png

Parser_LR

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

select name from user

LL(K) > LR(1) > LL(1)

image.png

tools

exp := exp '+' exp

exp = exp '*'exp

exp ::="NUMBER'

image.png

npx kison -m llk-g grammar.js -o cal.js

image.png

visitor

image.png



image.png