Philosophy

翻译自:Functional Reactive Programming on iOS – Ash Furrow. 版权所有, 转载请著明出处,保留链接。

Philosophy

这将是一章形而上的章节。“为什么?”,你会问我。“我原以为这是一本关于编码的书?把钱还我!”等下,其实这是一本给开发者变得更善于编程的书,首先,我们来说说,我们为什么要变得更好。

为什么我们想提高,特别是编码者向来被认为是懒的?精湛技艺是为了我们能更懒。我们想写更少的代码,或者更快的写代码。函数反应式编程能帮我们完成这些目标,但这也意味着涉及我们不舒适的领域。

所有的编程意味着要完成某些任务。大部分开发者训练于命令式编程中。命令式编程范式依赖于开发者思考他们怎么去完成这些任务:开发者通过写代码指令改写程序状态来完成。如果编码者以正确的次序写正确的指令,程序输的出会正确的地成它的任务。

听起来有些寻常。

为什么我们被训练成以“怎样”来思考?我想我们以命令式编程,因为我们知道计算机事实上就是这么工作的。CPU周而复始的这样工作着:获取,执行,获取,执行。多么地无聊。

相反,声明式编程使开发者不要去思考怎么完成任务,而让他们把注意力单单集中在他们完成的是什么任务。声明式编程是其他几种范式的概括,我们将稍后讨论。

Wiki 定义:

声明式编程不是以命令式的方式编码来描述想要的结果,列出执行的命令或者步骤。而函数和逻辑式编程语言是声明式编程的特点。

函数反应式编程也在声明式编程范式中,这是这本书的关注点。

Functional Reactive Programming

函数反应式编程是一种编程范式,它是子范式函数式和反应式的组合。反应式相对来说简单,我们先来说说它。

以电子表格来打个对比,假设有一个电子单元格A, 它是电子单元表格B和C的和。当B和C中的任一个发生改变,那么变化会传导到单元格A,从而导致A值的变化。通常,我们不会注意到这是怎么发生的。

现在,来定义下函数式编程。GOOGLE下函数式编程,你会发现定义它比较困难。通过函数式编程范式框架,我们可以构建程序,其核心:在编程过程中,函数作为第一对象对待。

在函数式编程中,没有可变状态,一个函数,f, 对于同样的输入产生同样的输出。

这让你感到惊恐,我知道,因为我们程序员一簇一直依赖状态的可变性来编码。很难让人想象存在这样一个世界,当把一个值赋给一个变量后,你不能再赋值给它。函数式编程显得极端,从很多方面来看,它确实如此。有部分编码,例如用户输入,网络I/O等,通过函数式范式构建程序是不太容易的。而这正是在函数反应式编程中融入了反应式编程的原因。

函数反应式编程是一块巧巧板,需要在命令式编程和函数式编程间找到平衡点,而我们程序员一簇就是一群孩童,快乐的玩耍并找到平衡。

函数反应式编程把用户的输入作为函数来对待,函数的返回值会随着时间而改变。那么,从这个角度来看,如果函数的输入参数是时间,那么函数将不会返回相同的值,因为时间是一直在变的值。这有点臆想,但请记住,我们构建了一个框架,在这个框架中我们能够思考。

Conclusion

本章的关键点:

  • 我们在这学习函数反应式编程,所以我们能有更高的效率。
  • 声明式编程使我们不用去思考怎么去完成任务,而把精力集中在任务本身。
  • 函数反应式编程是函数式和反应式编程结合。

我不是理论的宣扬者,你我都是开发者,需要把代码码完,所以我以占用你最少的时间来讨论函数反应式编程的哲学。在下一章,我们将深入到代码。

翻译自:Functional Reactive Programming on iOS – Ash Furrow. 版权所有, 转载请著明出处,保留链接。