Flow का परिचय: यह क्या है और क्यों ज़रूरी है?
Flow, Kotlin प्रोग्रामिंग भाषा में रिएक्टिव डेटा स्ट्रीम (reactive streams) के साथ काम करने के लिए एक लाइब्रेरी है। यह Kotlin Coroutines इकोसिस्टम का हिस्सा है और समय के साथ उत्पन्न होने वाले डेटा सीक्वेंस को प्रोसेस करने का एक शक्तिशाली, टाइप-सेफ और एसिंक्रोनस तरीका प्रदान करता है।
सामान्य कलेक्शन (List, Set) के विपरीत, जो सभी एलिमेंट्स को एक साथ मेमोरी में स्टोर करते हैं, Flow एक कोल्ड स्ट्रीम (cold stream) है। इसका मतलब है कि डेटा तभी जनरेट होना शुरू होता है जब कोई सब्सक्राइबर (collector) आता है। Flow निम्नलिखित के लिए एकदम सही है:
- एसिंक्रोनस डेटा प्रोसेसिंग: मेन थ्रेड को ब्लॉक किए बिना नेटवर्क, डेटाबेस या फ़ाइल सिस्टम से डेटा प्राप्त करना।
- इवेंट हैंडलिंग: क्लिक, माउस मूवमेंट, UI अपडेट।
- रिएक्टिव प्रोग्रामिंग: ऑटोमैटिक एरर हैंडलिंग और कैंसलेशन के साथ डेटा ट्रांसफॉर्मेशन चेन (map, filter, flatMap) बनाना।
- कोरुटीन के साथ इंटीग्रेशन: Flow पूरी तरह से Kotlin Coroutines के साथ संगत है, जिससे इसे अन्य एसिंक्रोनस ऑपरेशनों के साथ जोड़ना आसान हो जाता है।
पुराने तरीकों (जैसे RxJava या callbacks) के बजाय Flow का उपयोग क्यों करें?
- सरलता और संक्षिप्तता: Flow का API न्यूनतम और Kotlin डेवलपर्स के लिए सहज है।
- सुरक्षा: कंपाइलर स्तर पर टाइप-सेफ्टी।
- कोरुटीन के साथ इंटीग्रेशन: स्ट्रक्चर्ड कंकरेंसी (structured concurrency) के सभी लाभों का उपयोग करता है।
- परफॉरमेंस: हल्का और कुशल, अनावश्यक ऑब्जेक्ट नहीं बनाता।
Flow की स्थापना (Installation)
Flow, kotlinx.coroutines लाइब्रेरी का हिस्सा है। इसका उपयोग करने के लिए, आपको अपनी build.gradle.kts (Gradle के लिए) या pom.xml (Maven के लिए) फ़ाइल में डिपेंडेंसी जोड़नी होगी।
Gradle (Kotlin DSL)
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1")
// Android में Flow का उपयोग करने के लिए (Lifecycle सपोर्ट के साथ)
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1")
}
Gradle (Groovy)
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1'
}
Maven
org.jetbrains.kotlinx
kotlinx-coroutines-core
1.8.1
महत्वपूर्ण: सुनिश्चित करें कि Kotlin का वर्जन और kotlinx-coroutines का वर्जन संगत हैं। नवीनतम वर्जन GitHub पर पाया जा सकता है।
त्वरित शुरुआत: पहला Flow
चलिए एक सरल Flow बनाते हैं जो देरी के साथ तीन नंबर एमिट करता है, और उस पर सब्सक्राइब करते हैं।
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun simpleFlow(): Flow<Int> = flow {
println("Flow शुरू हुआ")
for (i in 1..3) {
delay(100) // एसिंक्रोनस काम का अनुकरण
emit(i) // वैल्यू एमिट करें
}
}
fun main() = runBlocking {
println("मुख्य थ्रेड: ${Thread.currentThread().name}")
// Flow पर सब्सक्राइब करें (डेटा कलेक्ट करें)
simpleFlow().collect { value ->
println("प्राप्त हुआ: $value")
}
println("Flow समाप्त हुआ")
}
आउटपुट:
मुख्य थ्रेड: main
Flow शुरू हुआ
प्राप्त हुआ: 1
प्राप्त हुआ: 2
प्राप्त हुआ: 3
Flow समाप्त हुआ
व्याख्या:
flow { ... }— एक कोल्ड स्ट्रीम बनाता है।