在简单情况下使用反应式编程的原因

时间:2017-11-11 17:33:18

标签: rx-java reactive-programming rx-java2 imperative-programming

拜托,有人可以解释一下使用反应式风格有什么好处:

Observable<String> greeting = Observable.just("Hello");
Observable<String> yelling = greeting.map(s -> s.toUppercase());

而不是简单的命令式风格:

String greeting = "Hello";
String yelling = greeting.toUppercase();

我理解反应性编程与数据库访问,UI,计算,网络访问等相同的“API”。但为什么我们需要使用反应式编程来实现简单的toUppercase

4 个答案:

答案 0 :(得分:6)

除了所有没有阻塞功能之外,使用反应式编程的另一个重要功能是背压的重要用途。通常用于您的发布者发布的信息多于您的消费者可以处理的信息。

因此,通过这种机制,您可以控制两者之间的流量,避免出现令人讨厌的内存问题。

您可以在此处查看一些反应性编程的实例示例https://github.com/politrons/reactive

关于这里的背压https://github.com/politrons/Akka/blob/master/src/main/scala/stream/BackPressure.scala

顺便说一下,反应性编程的唯一缺点是学习的曲线,因为你正在改变编程的范式。但是现在所有重要的公司都尊重并遵循反应性宣言http://www.reactivemanifesto.org/

如果您想查看一些实际示例,可以在此处参考https://github.com/politrons/reactive

答案 1 :(得分:1)

你是对的,你不需要使用RxJava“for simple toUppercase”。 使用异步数据流时,反应式编程具有优势。

答案 2 :(得分:0)

使用反应式编程可以做的一切,您也可以使用简单的函数或简单的事件监听器。

在异步编程中:反应式编程大部分情况不能甚至使您的代码库更小更容易阅读。但它会使您的代码更强大易于扩展供以后使用。

当数据作为流发送时非常好,特别是当流上推送多个元素且时间不同时,您需要执行与时序相关的操作,反应式编程使代码更易于维护。

答案 3 :(得分:0)

在您给出的上述示例中,没有真正使用反应式编程。它以不同的方式完成工作。

当您处理数据流并希望以简单有效的方式对它们进行操作时,反应式编程的真正优势就在于您可以在首选线程上运行。反应性编程有许多操作员会让新手程序员感到害怕,但是一旦掌握了基础知识,就会更容易理解哪个操作符合您的需求。

看一下这篇文章Simple background polling with RxJava,并想一想如何在普通的java中用几行代码获得相同的东西。

我总是喜欢更多的代码行。我的辩护是更多的代码行意味着更容易理解。但是一旦你开始与一个庞大的团队一起开展大型项目,就很难理解代码库。

两者中哪一个更容易理解?

take(10);

OR

int limit = list.size() < 10 ? list.size() : 10;
for (int i = 0 ; i < limit ; i ++) {
    Log.d("Value", list.get(i));
}

两者都获得列表中的前10个项目。如果列表较小,则获得总大小。