آیا تا حالا با RxJava کار کردید ؟ با Sequences چطور ؟ امروز با مبحثی آشنا میشیم که میتونه جایگزینی برای استفاده از این ابزار باشه . در این مقاله با به طور ساده این مبحث رو با هم بررسی میکنیم .
قبل از هر چیز باید بدونیم برنامه نویسی Reactive چیه ؟ به طور خلاصه کاری که RxJava یا RxAndroid یا RxKotlin یا ... انجام میدن پیاده سازی این نوع برنامه نویسی برای محیط جاوا/کاتلین/اندروید هستند . در برنامه نویسی Reactive یا "واکنش گرا" ما با استریمی از داده ها ، event ها و callback ها کار داریم .
در واقع Flow همون طور که از اسمش هم پیداست sequence ای از داده ها به صورت آسنکرون هست . Flow اگر با Coroutines تکریب شود Coroutines را به عنوان scheduler (برای بردن روی Thread های مختلف) اتخاذ میکند . Flow به طور کامل Coroutines رو ساپورت میکنه و در کنار هم ابزار قدرتمندی برای توسعه اپلیکیشن ها محسوب میشوند .
به تصویر بالا توجه کنید ، تابع getValues برای ما مقادیری از جنس Flow رو emit میکنه و تابع processValues که این Flow رو دنبال یا Subscribe میکنه مقادیر emit شده رو میگیره و پردازش مورد نظر خودش رو انجام میده .
مزایای Flow
ابتدا باید کتابخونه Coroutines رو به پروژه اضافه کنید
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.1'
و نتیجه :
حالا یک مثال جامع تر رو بررسی خواهیم کرد ، فرض کنید مدل دیتایی داریم که شامل لیستی از User ها است ، ما میخواهیم اسامی این User ها رو در صفحه ای خاص داشته باشیم ، در این سناریو دو بار لیستی از User ها emit میشود با فاصله زمانی 2 ثانیه و سپس یک ارور 403 قرار است داده شود .
ما یک DataSource خواهیم داشت که وظیفه این عمل رو به عهده میگیره ، این کلاس وظیفه اتصال به Api رو دارد (که اینجا البته نیست و صرفا یک لیستی پاس میدهیم) ، سپس در Repo دیتا process شده و تبدیل به لیستی از اسامی میشود ، سپس در UI نمایش داده میشود (مسلما یک پیاده سازی ساده است ، بعد از خواندن این مقاله سعی کنید Flow رو با MVVM یا دیگر معماری هایی که استفاده میکنید مثل Clean MVVM یا MVI ترکیب کنید ) :
و خروجی :
شما میتواند Flow را به جای LiveData یا Rx با Room هم ترکیب کنید :
البته Flow به همینجا ختم نمیشود و ویژگی های بسیاری دارد که سعی میکنم در آینده در مورد اونها با هم صحبت کنیم .
اگر از مقالات من راضی هستید لطفا به LinkedIn من برید و من Skill های مرتبط با اندروید من رو یک پلاس روش بزنید :)
آدرس کانال تلگرامی ما : لینک
لینک گیت مقاله رو هم در این لینک میتونید ببینید .
من رو در لینکدین ، اینستاگرام و یوتیوب دنبال کنید !!!
اگه دوست داشتید میتونید به صفحه Spotify و SoundCloud بنده هم برید و موسیقی های منو گوش بدید !!!