编程范式
03编程范式
程序语言特性:
- 是否允许副作用
- 操作的执行顺序
- 代码组织
- 状态管理
- 语法和词法
- 常见编程范式
-
- 命令式(面向过程:把操作用过程进行分组、面向对象:根据操作和对应状态进行分组):侧重于程序员如何操作机器改变状态
-
- 声明式(函数式:通过一系列函数如何来声明逻辑、响应式:通过数据流和印证函数来得到结果)程序员声明想要的结果而进行一些操作
过程式编程
- 自顶向下
- 结构化编程:是过程式编程的最佳实现
面向过程式编程有什么缺点?
- 数据与算法关联弱
- 不利于修改和扩充
- 不利于代码重用
面向对象编程特点
- 封装:把客观的事物封装成具体的类
- 继承:无需重写的情况下进行功能扩充,可以让某个类型的对象可以获得另一个类型的对象的属性和方法,支持按级分类的概念
- 多态:是指一个类持相同的方法在不同的情境下有不同的表现形式。不同的结构可以进行接口共享,进而达到函数复用
- 依赖注入:去除代码耦合
面向对象编程——五大原则
- 单一职责原则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 ISP)
面向对象编程有什么缺点?
函数式编程_Pure Function
- 优势
- 可缓存
- 可移植
- 可测试
- 可推理
- 可并行
函数式编程_Functor
可以当作容器的类型,类型支持对容器内元素进行操作
常见的Functor:Array(Iterable).map,Promise.then
函数式编程_Monad
可以去除嵌套容器的容器类型
常见monad:Array.flatMap Promise.then
函数式编程_Applicative
对两个容器直接操作
一些规则:
响应式编程
异步/离散的函数式编程(数据流、操作符:过滤、合并、转化、高阶)
响应式编程_Observable
- 观察者模式(发布者)
- 迭代器模式
- Promise/EventTarget超集
响应式编程_操作符
响应式编程的“compose”
- 合并
- 过滤
- 转化
- 异常处理
- 多播
响应式编程_Monad
去除嵌套的Observable
总结