2017-02-06 21 views
22

मैं कोटलिन कोरआउट का उपयोग क्यों करना चाहूंगा?आरएक्सकोटलिन की तुलना में कोटलिन कोरआउट कैसे बेहतर हैं?

ऐसा लगता है कि आरएक्सकोटलिन पुस्तकालय बहुत अधिक बहुमुखी है। कोटलिन कोरआउट्स काफी कम शक्तिशाली दिखते हैं, और तुलना में उपयोग करने के लिए अधिक बोझिल लगते हैं।

मैं एंड्री Breslav (जेटब्रेन्स) द्वारा इस डिजाइन बात पर coroutines पर मेरी राय का आधार: https://www.youtube.com/watch?v=4W3ruTWUhpw बात से

स्लाइड शो यहां पहुंचा जा सकता है: https://www.slideshare.net/abreslav/jvmls-2016-coroutines-in-kotlin

+5

coroutines की वर्तमान स्थिति पर एक बेहतर स्रोत: https://github.com/Kotlin/kotlin-coroutines/blob/master/kotlin-coroutines-informal। एमडी – hotkey

उत्तर

18

वहाँ आरएक्स में दो भागों है; अवलोकन करने योग्य पैटर्न, और ऑपरेटरों का एक ठोस सेट उन्हें बदलने, बदलने और गठबंधन करने के लिए। पर्यवेक्षित पैटर्न, स्वयं ही, बहुत कुछ नहीं करता है। तो Coroutines करो; एसिंक्रोनिज्म से निपटने के लिए यह एक और प्रतिमान है। आप किसी दिए गए समस्या को हल करने के लिए कॉलबैक, अवलोकन और कोरआउट के प्रो/विपक्ष की तुलना कर सकते हैं, लेकिन आप पूरी तरह से फीचर्ड लाइब्रेरी के साथ प्रतिमान की तुलना नहीं कर सकते हैं। यह एक ढांचे के साथ एक भाषा की तुलना की तरह है।

कैसे रैक्सकोटलिन से कोटलिन कोरआउट बेहतर हैं? अभी तक coroutines का उपयोग नहीं किया था, लेकिन यह सी # में async/प्रतीक्षा के समान दिखता है। आप केवल अनुक्रमिक कोड लिखते हैं, सबकुछ सिंक्रोनस कोड लिखना जितना आसान है ... इसे छोड़कर इसे अतुल्यकालिक रूप से निष्पादित करें। समझना आसान है।

मैं कोटलिन कोरोटाइन का उपयोग क्यों करना चाहूंगा? मैं खुद के लिए जवाब दूंगा। अधिकांश समय मैं आरएक्स के साथ रहूंगा, क्योंकि मैं घटना संचालित वास्तुकला का पक्ष लेता हूं। लेकिन उस स्थिति को उठाना चाहिए जहां मैं अनुक्रमिक कोड लिख रहा हूं, और मुझे बीच में एक एसिंक्रोनस विधि को कॉल करने की आवश्यकता है, मैं खुशी से इस तरह से रखने के लिए कोरआउटिन का लाभ उठाऊंगा और अवलोकन में सबकुछ लपेटने से बचूंगा।

+1

तो एक अवलोकन में सबकुछ लपेटने के बजाय, आप भविष्य में सब कुछ लपेटेंगे। – IRus

+5

सौभाग्य से, कोटलिन कोरआउट्स सी # और जेएस के विपरीत हैं और भविष्य में आपके कोड को लपेटने की आवश्यकता नहीं है। आप कोटलिन कोरोटाइन के साथ वायदा का उपयोग कर सकते हैं, लेकिन कोटलिन कोरोटाइन पर आधारित _idiomatic_ कोड लगभग कोई वायदा का उपयोग नहीं करता है। –

+0

कोई आसानी से चैनलों का उपयोग करके ईवेंट संचालित आर्किटेक्चर कर सकता है। – pablisco

37

कोटलिन कोरआउट्स आरएक्स से अलग हैं। सेब-टू-सेब की तुलना करना मुश्किल है, क्योंकि कोटलिन कोरौटाइन एक पतली भाषा सुविधा है (केवल कुछ बुनियादी अवधारणाओं और उनके साथ छेड़छाड़ करने के लिए कुछ बुनियादी कार्यों के साथ), जबकि आरएक्स बहुत बड़ी विविधता के साथ एक बहुत भारी लाइब्रेरी है उपयोग करने के लिए उपयोग ऑपरेटर। दोनों अतुल्यकालिक प्रोग्रामिंग की एक समस्या का समाधान करने के लिए डिज़ाइन कर रहे हैं, फिर भी समाधान के प्रति उनके दृष्टिकोण बहुत अलग है:

  • आरएक्स प्रोग्रामिंग की एक विशेष कार्यात्मक शैली से समर्थन के बिना एक वास्तव में किसी भी प्रोग्रामिंग भाषा में लागू किया जा सकता है कि के साथ आता है भाषा ही यह अच्छी तरह से काम करता है जब हाथ की समस्या आसानी से मानक ऑपरेटरों के अनुक्रम में विघटित होती है और अन्यथा नहीं।

  • Kotlin coroutines है कि पुस्तकालय लेखकों सहित विभिन्न अतुल्यकालिक प्रोग्रामिंग शैलियों, को लागू करने के लिए, लेकिन कार्यात्मक प्रतिक्रियाशील शैली (आरएक्स) तक ही सीमित नहीं एक भाषा की सुविधा प्रदान करते हैं। Kotlin आप भी जरूरी है शैली में अपने एसिंक्रोनस कोड, वादा/वायदा आधारित शैली में अभिनेता-शैली में, आदि लिख सकते हैं coroutines साथ

यह कुछ विशिष्ट लाइब्रेरी कि लागू किया जाता है के साथ आरएक्स तुलना करने के लिए अधिक उपयुक्त है Kotlin coroutines पर आधारित है।

एक उदाहरण के रूप में kotlinx.coroutines library लें। यह पुस्तकालय प्राइमेटिव्स का एक सेट प्रदान करता है जैसे async/await और चैनल जो आमतौर पर अन्य प्रोग्रामिंग भाषाओं में बेक्ड होते हैं। इसमें हल्के वजन वाले भविष्य-कम कलाकारों के लिए भी समर्थन है। आप Guide to kotlinx.coroutines by example में और अधिक पढ़ सकते हैं।

kotlinx.coroutines द्वारा प्रदान किए गए चैनल कुछ उपयोग-मामलों में आरएक्स को प्रतिस्थापित या बढ़ा सकते हैं। एक अलग Guide to reactive streams with coroutines है जो आरएक्स के साथ समानताएं और मतभेदों में गहराई से चला जाता है।

2

आपके द्वारा लिंक की गई बातचीत/दस्तावेज़ चैनलों के बारे में बात नहीं करता है। चैनल कोरआउट और घटना संचालित प्रोग्रामिंग की आपकी वर्तमान समझ के बीच अंतर को भरते हैं।

कोरआउट और चैनलों के साथ आप ईवेंट संचालित प्रोग्रामिंग कर सकते हैं क्योंकि आप शायद आरएक्स के साथ काम करते हैं, लेकिन आप इसे सिंक्रोनस-दिखने वाले कोड और बिना "कस्टम" ऑपरेटरों के साथ कर सकते हैं।

यदि आप इसे बेहतर समझना चाहते हैं तो मैं कोटलिन के बाहर देखने का सुझाव देता हूं, जहां उन अवधारणाएं अधिक परिपक्व और परिष्कृत (प्रयोगात्मक नहीं) हैं। क्लोजर, रिच हिकी वीडियो, पोस्ट और संबंधित चर्चाओं से core.async पर देखें।

संबंधित मुद्दे