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

相關問題