编程范式|青训营笔记

58 阅读3分钟

**程序语言特性:

1.是否允许副作用
2.操作的执行顺序
3.代码组织
4.状态管理
5.语法和词法

**编程范式:

1.命令式(如何操作机器改变状态):
     1).面向过程(把操作进行分组)
     2).面向对象(根据操作对应的状态进行分组)
2.声明式(声明响应的结果,不指明具体的操作):
     1).函数式(通过一系列的函数组合来声明逻辑)
     2).响应式(通过拘留和印证函数来表示结果)

**过程式编程:

1.自顶向下(从顶向下来设计程序)
2.结构化编程(顺序结构、选择结果、循环结构,替代go to

JS支持面向过程

**面向过程问题:

1.数据与算法关联弱
2.不利于修改和扩充
3.不利于代码重用

**面向对象编程:

1.封装(把客观的事物分装成具体的类,类可以把自己的数据和方法值让可信的类进行操作,对不可信的类进行隐藏)(一个类就是封装了数据以及操作这些代码的逻辑形式)
2.继承(可以让某个类型的对象可以获得另一个对象的属性方法)(可以使用现有类的所有功能,并且在不需标有原有类的情况下,对这些类进行扩充。即无需重写的情况下进行功能扩充)
3.多态(不同的结构可以进行接口共享,进而达到函数复用)
4.依赖注入*(在程序运用过程中,如果需要调用另一个对象使用时,无需在代码中创建被调用者,而是运用外部注入)

**面向对象编程_五大原则:

1.单一职责原则SRP
一个类的功能要单一
2.开放封闭原则OCP
一个模块在扩展性方面是开放,在更改性方面是封闭的
3.里式替换原则LSP
子类应该可以替换父类,并且出现在父类出现的任何地方
4.依赖倒置原则DIP
具体依赖抽象,上层依赖下层
5.接口分离原则ISP
任何时候这种依赖都要通过接口来分,而不依赖具体问题的实现

**函数式编程:

1.函数是“第一等公民’
2.纯函数/无副作用
3.高阶函数/闭包

#函数式编程_Fitst Class Function:聚合转发

#函数式编程_Pure Function 优势:可缓存可移植、可测试、可推理、可并行

#函数式编程_Currying

#函数式编程_Composition

#函数式编程_Functor:可以当作容器的类型,类型支持对容器内元素进行操作

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

#函数式编程_Monad:可以去除嵌套容器的容器类型

常见:monad;Array.flatMap Promise.then

#函数式编程_Applicative:直接对两个容器直接操作

**响应式编程:

   异步/离散的函数式编程:
     (1).数据流
     (2).操作符:过滤、合并、转化、高阶

**响应式编程_Observable:

1.观察者模式
2.迭代器模式
3.Promise/EventTarget 超集*(数据持续来)

响应式编程_操作符

响应式编程的"compose":合并、过滤、转化、异常处理、多播

响应式编程_Monad:去除嵌套的Observable

*DSL:应用于特点领域的语言

*HTML

*SQL

SQL Token分类:注释、关键字、操作符、空格、字符串、变量

**Parser_语法规则

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

Parser_LL

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