函数式反应型编程
函数式反应型编程是两个声明式编程的子范例(函数式+反应式)的组合。这里我们先来理解反应式编程,因为它非常简单。
反应式编程在表处理方面十分强悍。假设我们有一个表格A:她是用来纪录其他两个表格(表格B、表格C)的和。当表格B或C当中任意一个值发现变化时,这些变化都会通过表实时改变表格A的值。总之,我们定义好了A是B和C的和,不管发生了什么,A会一直响应B或C的变化,永远都是B与C的和。
接下来我们来定义函数式编程。说实话很难准确定义它。任何试图通过Google这个词来了解它的人都会得到这样一个答案:函数范式是一个框架,可以用来构建我们的程序。函数式编程的核心是:在你的开发语言中函数本身是一个对象,且是所有类对象中的一等公民。
函数式编程中,对于同样的输入,一个函数f始终会给出同样的输出,不存在’可变的状态’。这听起来有点不可思议,我们可都是依靠状态的多变性来编写程序啊。在这个给变量赋值之后就不可以重新赋值的世界里,想想都觉得不可思议。函数式编程在很多方面显得不太实用。很多编程涉及到用户的输入、网络输入/输出等等,都不太容易使用函数范式来构建。这也是为什么函数式编程作为函数式反应型编程的一部分而出现的原因。因为函数式反应型编程是命令行编程与函数式编程两者相互妥协的最佳平衡点。她让我们有鱼与熊掌兼得的意思。
函数式反应型编程在处理用户输入时,就像是随着时间的改变而改变其结果的函数。有鉴于此,前面我们谈到的函数f,被假定为输入相同的参数就会返回一样的值,但如果参数是时间,则f就不会返回相同的值,因为时间一直在变化。这是一种‘欺骗’行为,但请记住,我们正在构建一个框架,在这个框架里面,我们都被允许实施这种’欺骗’行为,这就是函数式反应型编程。