Kotlin में रिएक्टिव प्रोग्रामिंग: RxKotlin से कोरूटीन्स तक
रिएक्टिव प्रोग्रामिंग एक प्रतिमान है जो डेटा स्ट्रीम के अतुल्यकालिक प्रसंस्करण और परिवर्तनों के प्रसार पर केंद्रित है। Kotlin पारिस्थितिकी तंत्र में, इस अवधारणा को दो मुख्य तरीकों से लागू किया गया है: RxKotlin लाइब्रेरी (RxJava पर आधारित Kotlin के लिए रिएक्टिव एक्सटेंशन) और कोरूटीन्स के साथ अंतर्निहित तंत्र Flow के माध्यम से। इस लेख में, हम दोनों दृष्टिकोणों, उनकी विशेषताओं और उपयोग के उदाहरणों पर विस्तार से चर्चा करेंगे।
रिएक्टिव प्रोग्रामिंग क्या है?
रिएक्टिव प्रोग्रामिंग का मूल विचार डेटा को निरंतर स्ट्रीम के रूप में काम करना है। डेटा का अनुरोध करने और प्रतिक्रिया की प्रतीक्षा करने के बजाय, आप एक स्ट्रीम की सदस्यता लेते हैं और प्रत्येक नई घटना पर प्रतिक्रिया करते हैं। यह UI एप्लिकेशन, उपयोगकर्ता इनपुट प्रसंस्करण, नेटवर्क अनुरोध और डेटाबेस के साथ काम करने के लिए विशेष रूप से उपयोगी है।
RxKotlin लाइब्रेरी
RxKotlin, RxJava के ऊपर एक रैपर है जो Kotlin के लिए सुविधाजनक एक्सटेंशन जोड़ता है, जैसे लैम्ब्डा, एक्सटेंशन फ़ंक्शन और null-सुरक्षा समर्थन। मुख्य प्रकार:
Observable<T>— एक स्ट्रीम जो 0 से N तत्वों का उत्सर्जन कर सकती है और त्रुटि या सफलता के साथ समाप्त हो सकती है।Single<T>— एक स्ट्रीम जो ठीक एक तत्व या त्रुटि उत्सर्जित करती है।Flowable<T>— बैकप्रेशर (खपत गति प्रबंधन) के समर्थन वाली स्ट्रीम।Completable— एक स्ट्रीम जो बिना डेटा के केवल समाप्त होती है (सफलता/त्रुटि)।
RxKotlin उदाहरण
import io.reactivex.rxjava3.core.Observableimport io.reactivex.rxjava3.schedulers.Schedulers
fun main() { val observable = Observable.create<String> { emitter -> emitter.onNext("Привет") emitter.onNext("из") emitter.onNext("RxKotlin") emitter.onComplete() }
observable .subscribeOn(Schedulers.io()) .observeOn(Schedulers.single()) .subscribe( { value -> println("Получено: $value") }, { error -> println("Ошибка: ${error.message}") }, { println("Поток завершён") } )
Thread.sleep(1000) // Ждём завершения асинхронных операций}इस उदाहरण में, एक Observable बनाया गया है जो तीन स्ट्रिंग उत्सर्जित करता है और समाप्त हो जाता है। subscribeOn और observeOn ऑपरेटर निष्पादन थ्रेड को नियंत्रित करते हैं।
Kotlin में कोरूटीन्स और Flow
Kotlin 1.3 से शुरू होकर, कोरूटीन्स भाषा का हिस्सा बन गए, और Flow (1.3.70 में पेश किया गया) एक रिएक्टिव स्ट्रीम है जो कोरूटीन्स के साथ पूरी तरह से एकीकृत है। RxKotlin पर लाभ:
- कम ओवरहेड (हल्के कोरूटीन्स बनाम Java थ्रेड्स)।
- suspend-फ़ंक्शन के साथ प्राकृतिक एकीकरण।
- स्ट्रक्चर्ड कंकरेंसी का समर्थन (स्कोप समाप्त होने पर स्वचालित रद्दीकरण)।
- कॉलबैक के बिना अधिक स्वच्छ सिंटैक्स।
Flow उदाहरण
import kotlinx.coroutines.*import kotlinx.coroutines.flow.*
fun main() = runBlocking { val flow = flow { for (i in 1..5) { delay(100) // Имитация асинхронной работы emit(i) // Испускаем элемент } }
flow .map { it * it } // Преобразование .catch { e -> println("Ошибка: $e") } .collect { value -> println("Квадрат: $value") }}Flow आलसी है: डेटा केवल collect कॉल करने पर उत्पन्न होना शुरू होता है। map, filter, flatMapConcat जैसे ऑपरेटर Rx की तरह ही काम करते हैं।