拜托,有人可以解释一下使用反应式风格有什么好处:
Observable<String> greeting = Observable.just("Hello");
Observable<String> yelling = greeting.map(s -> s.toUppercase());
而不是简单的命令式风格:
String greeting = "Hello";
String yelling = greeting.toUppercase();
我理解反应性编程与数据库访问,UI,计算,网络访问等相同的“API”。但为什么我们需要使用反应式编程来实现简单的toUppercase
答案 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个项目。如果列表较小,则获得总大小。