编程范式 | 青训营笔记

92 阅读2分钟

编程范式-青训营

target

不同编程范式的起源和适用场景

js不同编程范式尤其是函数式编程的使用

创建领域特定语言的工具和模式

一、编程语言

js——基于原型和头等函数的多范式语言

过程式

面向对象

函数式

响应式

二、编程范式

1. 程序语言特性

是否允许副作用

操作的执行顺序

代码组织

状态管理

语法和词法

关于程序语言特性,之前阅读过如何掌握所有的程序语言这篇博客,其中心思想就是不要崇拜某种语言,而是像买电脑查看各个配置一样,关注组成语言的语言特性,而不是纠结究竟是哪个语言更好。而在学习的过程中,我们需要的是用一个主流的语言入门,关注重要的语言特性,而不是纠结例如printf这样的细节,然后更进阶的,我们可以自己实现语言特性。

2. 编程范式

命令式

面向过程

面向对象

声明式

函数式

响应式

命令式和声明式:比如你想吃番茄鸡蛋,命令式就是发出指令,先拿出番茄和鸡蛋,再打鸡蛋,再炒鸡蛋。。。声明式就是直接说“我需要番茄鸡蛋”。React的组件就是声明式。

2.1 面向过程

自顶向下+结构化

数据和程序分开,数据自顶向下的经历每一段程序。

问题:

数据和算法关联弱

不利于修改和扩充

不利于代码重用

2.2 面向对象

封装:关联数据和算法,数据以对象属性的方式和算法耦合

继承:无需重写就可实现功能扩充

多态:子类重写父类的方法,但是方法名相同,因此,同样的方法名对于不同类的对象的实现不同

依赖注入:为了去除代码耦合,类A需要用到类B的功能,不选择在A的构造函数内新建B的实例,而是将已有的对象b通过属性、构造函数等方式注入类A中。

2.3 函数式编程

特性:

函数式“一等公民”

——也就是函数可以作为变量

纯函数/无副作用

高阶函数/闭包

2.4 响应式编程

异步/离散的函数式编程

在响应式编程中,程序会对数据流进行监听,并在数据发生变化时自动作出反应,而不需要显式地进行状态或事件管理。

实现:

观察者模式

迭代器模式

Promise/EventTarget 超集

数据经过管道,经过一个个操作符的处理,类似于Redux的中间件,koa的中间件机制?

三、领域特定语言

DSL:Domain-specific language

参考阅读:《DSL的误区》