【问题标题】:The difference between Reactive and Functional-Reactive programming反应式和功能反应式编程之间的区别
【发布时间】:2011-07-20 02:43:51
【问题描述】:

我最近一直在对响应式编程进行一些研究,但我发现很难找到关于响应式和 函数式-响应式之间区别的良好描述。

响应式编程是使用函数式方法/范式实现的,而不是使用声明式或 OO 范式吗?

【问题讨论】:

    标签: programming-languages functional-programming paradigms reactive-programming


    【解决方案1】:

    函数响应式编程 (FRP) 是具有特定语义的特定编程模型。 (实际上有两种变体,有时称为“经典玻璃钢”和“箭头玻璃钢”。) 我在an answer to "What is (functional) reactive programming?" 中给出了总结。 正如我在那里所说,对我来说,两个关键属性一直是(a)精确和简单的外延和(b)连续时间。 我很遗憾这种模型后来被称为“函数式反应式编程”,原因如下:

    • 这个名字省略了“时间”,而时间对我来说很重要。
    • “功能性”一词的具体/明确含义太少了。 我更喜欢彼得兰丁建议的替换“外延”。 (请参阅this blog comment 中的引用和参考。)
    • 人们很容易错误地认为他们知道这个词的含义,因为他们知道(或多或少)这三个词中的每一个词的含义。

    为了描述性和准确性,我更喜欢术语“指示性连续时间编程”(Jake McArthur 在不久前的一次谈话中建议)而不是“函数式反应式编程”。

    我在博文Early inspirations and new directions in functional reactive programming写了一篇很短的关于玻璃钢的由来。

    【讨论】:

      【解决方案2】:

      FRP 是函数式编程(建立在一切都是纯函数的理念之上的编程范式)和反应式编程范式(建立在一切都是流(观察者和可观察的哲学)的理念之上)的组合。它应该是两全其美的。

      两者的定义更清楚地区分了两者。

      【讨论】:

      • 伟大的概述:)
      • 你能再深入一点吗?我喜欢你的解释,但是当我使用 reactiveX(例如 RxJava)时,我是反应式的,但不一定是功能性的?因为在反应函数(链)中,我仍然可以产生副作用或非幂等(非函数)。
      • 您认为是正确的@BenButterworth 使用 RxJava 或就此而言,任何反应式库都不能保证功能行为。确保没有副作用是开发人员的职责。
      最近更新 更多