编程范式 | 青训营笔记

89 阅读3分钟

编程范式

一.  课程介绍

背景:

1.    前端开发的主要语言为JS

2.    JS做为一种融合了多种编程范式的语言,灵活性高

3.    前端开发人员需要根据场景在不同的编程范式间自如切换

4.    进一步需要创造特定语言抽象业务问题

二.  编程语言

机器语言: 8086指令格式

汇编语言: 用字母代替数字

高级语言: C/C++

C++:  C with class

继承

权限控制

虚函数

多态

Lisp:函数式语言代表

            与机器无关

            列表:代码即数据

            闭包

JS:基于原型和头等函数的多范式编程

过程式

面向对象

函数式

响应式

三.编程范式

程序语言特性:1. 是否允许副作用

                        2. 操作的执行顺序

                        3. 代码组织

                        4. 状态管理

                        5. 语法和词法

编程范式:

1.    命令式:面向过程、面向对象

2.    声明式:函数式、响应式

 

过程式编程:自顶向下、结构化编程

缺点:数据和算法关联弱

      不利于修改和扩充

      不利于代码重用

 

面向对象:

封装:关联数据和算法

继承:无需重写的情况下进行功能扩充

多态:不同的结构可以进行接口共享,进而达到函数复用

依赖注入:去除代码耦合

五大原则:

1.    单一职责原则

2.    开放封闭原则

3.    里式替换原则

4.    依赖倒置原则

5.    接口分离原则

缺点:数据太隐蔽

 

函数式编程:减少变化的部分

函数第一(聚合转发)

参数重复的话,可以先存入闭包

组合函数

优势:可缓存,可移植,可测试,可推理,可并行

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

常见的Functor:Array(Iterable).map, Promise.then

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

常见的Monad:Array.flatMap Promise.then

 

Applicative:直接对两个容器进行操作

 

响应式编程:异步/离散的函数式编程

有两个概念:数据流、操作符(过滤、合并、转化、高阶)

Observable:观察者模式、迭代器模式、Promise/EventTarget超集

操作符(响应式编程的“compose”):过滤、合并、转化、异常处理、多播

Monad:去除嵌套的Observable

四.领域特定语言

语言运行:

A`A(5NUUJ}L21OU5RBYMIRH.png  

lexer:SQL Token 分类

1.    注释 2. 关键字 3. 操作符 4. 空格 5. 字符串 6. 变量

Parser 语法规则

上下文无关语法规则

_J[R}(E]468D%L}ZT)~L8K.png

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

Parser_LL&LR

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

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

tools:用工具来产生语法解释器

visitor:遍历工具