iOS的函数响应式编程(二)

912 阅读5分钟

本书译者为: kevinHM

翻译自 leanpub.com/iosfrp

函数式反应型编程的理念

看到理念这一章很多人就会觉得有点反感,感觉被骗了,因为打开这本书就是来学函数式反应型编程的啊!各位稍安勿躁,会使用这本书的朋友都是些想要采取更好的方式进行编程的。既然如此,我们当然得知道为什么会有这种想法了。

对于程序员来说,过于冗长的代码肯定是不被接受的,所以程序员喜欢改进,喜欢提高技能来用更少的代码完成更多的任务。达到这种目的其实是很简单的,使用函数式反应型编程就可以了,值得注意的是,要使用函数式反应型编程就必须将自己原先的使用习惯先暂时放到一边。

所有的程序都是为了完成某些任务。大多数程序员所受的训练都是命令式编程。这种模式依赖于他们希望自己的程序如何来完成这些任务:开发者编写很多的指令来修正程序的状态;如果开发者在正确的位置上编写了正确的指令,那么程序将会正确地完成任务。

为什么编程时我们思考问题的方式都停留在“怎么做”这个点上? 因为计算机实际上是以一条条命令来工作的,CPU的程序计算器尽职尽责,按部就班:读取(怎么做的指令)---> 执行--->读取--->执行。。。所以理所当然的,我们只要告诉他们“怎么做”就好了(即命令式编程)。。。多么无聊啊。

与此相反,声明式编程(DeclarativeProgramming)将程序员们从纷繁复杂的对如何完成某些任务的细枝末节的流程中解放出来,将关注点集中在任务到底“是什么”而非实现任务的流程。声明式编程(DeclarativeProgramming)是命令式编程之外的几种编程范式的一个总称,我们将在稍后讨论。

维基百科:

声明式编程(英语:Declarativeprogramming)是一种编程范型,与命令式编程相对立。它描述目标的性质,让电脑明白目标,而非流程。声明式编程不用告诉电脑问题领域,从而避免随之而来的副作用。而指令式编程则需要用算法来明确的指出每一步该怎么做。

函数式反应型编程是声明式编程的子编程范式之一,这是本书要讨论的主要内容。

函数式反应型编程

函数式反应型编程指的是两个声明式编程的子范例(函数式+反应式)的组合。现在w3cschool小编先带大家来理解一下反应式编程,因为它是整个编程最基础的也是最简单的!

反应式编程在表处理方面十分强悍。假设我们有一个表格A:她是用来纪录其他两个表格(表格B、表格C)的和。当表格B或C当中任意一个值发现变化时,这些变化都会通过表实时改变表格A的值。总之,我们定义好了A是B和C的和,不管发生了什么,A会一直响应B或C的变化,永远都是B与C的和。

接下来我们来定义函数式编程。说实话很难准确定义它。任何试图通过Google这个词来了解它的人都会得到这样一个答案:函数范式是一个框架,可以用来构建我们的程序。函数式编程的核心是:在你的开发语言中函数本身是一个对象,且是所有类对象中的一等公民。

函数式编程中,对于同样的输入,一个函数f始终会给出同样的输出,不存在'可变的状态'。这听起来有点不可思议,我们可都是依靠状态的多变性来编写程序啊。在这个给变量赋值之后就不可以重新赋值的世界里,想想都觉得不可思议。函数式编程在很多方面显得不太实用。很多编程涉及到用户的输入、网络输入/输出等等,都不太容易使用函数范式来构建。这也是为什么函数式编程作为函数式反应型编程的一部分而出现的原因。因为函数式反应型编程是命令行编程与函数式编程两者相互妥协的最佳平衡点。她让我们有鱼与熊掌兼得的意思。

函数式反应型编程在处理用户输入时,就像是随着时间的改变而改变其结果的函数。有鉴于此,前面我们谈到的函数f,被假定为输入相同的参数就会返回一样的值,但如果参数是时间,则f就不会返回相同的值,因为时间一直在变化。这是一种‘欺骗’行为,但请记住,我们正在构建一个框架,在这个框架里面,我们都被允许实施这种'欺骗'行为,这就是函数式反应型编程。

函数式反应型编程结论

本章讨论的几个关键点:

  • 学习函数式反应型编程,我们将会更加高效。
  • 声明式编程把我们从关注业务的实现细节中解脱出来,用更多的时间关注业务本身。
  • 函数式反应型编程是函数式与反应式编程的结晶。

我是一个实用主义者。我们所有的开发者们都是在实践中完成自己的作品的。因此我想尽可能少的占用你的时间来讲述理念的东西,在下一章节,我们将深入探讨代码实现。