编程范式-青训营
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的误区》