0

请,有人可以给我解释一下什么是使用反应性风格的优点:原因在简单情况下使用反应式编程

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

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

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

我明白了反应式编程就像数据库访问,UI,计算,网络访问等的“API”一样。但为什么我们需要使用反应式编程来实现简单的toUppercase

回答

1

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

0

您可以使用无功编程的一切,你也可以使用简单的函数或简单的事件监听器。

在异步编程:无编程大多数的情况下不能甚至使你的代码更容易阅读。但它会使您的代码更加稳健,易于扩展供以后使用。

当数据作为数据流发送时,特别是在流中存在多个元素并且时间不同的情况下,您需要执行与时间相关的任务,反应式编程使代码更易于维护。

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个项目。如果列表较小,则获得总大小。

1

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

所以有了这个机制,你可以控制两者之间的流量流动,并避免讨厌的内存不足问题。

您可以在这里看到响应式编程https://github.com/politrons/reactive

的一些practicle例子,这里https://github.com/politrons/Akka/blob/master/src/main/scala/stream/BackPressure.scala

顺便说一句关于背压,关于响应式编程的唯一的缺点,是一个学习的曲线,因为you're改变编程范例。但现在所有重要的企业尊重和遵循反应宣言http://www.reactivemanifesto.org/

如果你想看到一些实际的例子,你可以参考这里https://github.com/politrons/reactive

相关问题