🚀 سری «Flow» قسمت دوم؛ وقتشه خودمون یک «Flow» بسازیم!
اول از همه بدونیم ساخت «Flow» سه راه اصلی داره:
۱️⃣ «flowOf» برای ساخت از مقادیر ثابت
۲️⃣ «asFlow» برای تبدیل «Collection» یا «Range» به «Flow»
۳️⃣ «flow builder» برای ساخت جریان دادههای ناهمزمان
💡 مثلاً فرض کن داری لیست کارهای یک کاربر رو از «Room Database» میخونی؛ بهترین راه برگردوندن «Flow» هست.
بریم سراغ کد، سادهترین حالت ساختن «Flow»:
توی «flow builder»، تابع «emit» مقدار تولید میکنه و «delay» فقط یه شبیهسازی از کار سنگینه.
بعداً با «Flow» حاصل میتونی از «StateFlow» یا «SharedFlow» هم استفاده کنی.
📌 نکته: «Flow» یه جریان «cold» هست؛ یعنی تا کسی جمعش نکنه، اجرا نمیشه.
🎯 پس هر وقت دادهای داری که بهمرور تولید میشه، «Flow» بهترین انتخابه.
بگو کدوم بخش برات مبهمه تا توی پست بعدی عمیقتر بریم.
#Codeit #Android #Kotlin #Jetpack #Flow #Coroutines #StateFlow #ReactiveProgramming
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
اول از همه بدونیم ساخت «Flow» سه راه اصلی داره:
۱️⃣ «flowOf» برای ساخت از مقادیر ثابت
۲️⃣ «asFlow» برای تبدیل «Collection» یا «Range» به «Flow»
۳️⃣ «flow builder» برای ساخت جریان دادههای ناهمزمان
💡 مثلاً فرض کن داری لیست کارهای یک کاربر رو از «Room Database» میخونی؛ بهترین راه برگردوندن «Flow» هست.
بریم سراغ کد، سادهترین حالت ساختن «Flow»:
val numberFlow: Flow<Int> = flowOf(1, 2, 3, 4, 5)
val rangeFlow: Flow<Int> = (1..5).asFlow()
val customFlow: Flow<String> = flow {
emit("شروع")
delay(1000)
emit("پایان")
}
توی «flow builder»، تابع «emit» مقدار تولید میکنه و «delay» فقط یه شبیهسازی از کار سنگینه.
بعداً با «Flow» حاصل میتونی از «StateFlow» یا «SharedFlow» هم استفاده کنی.
📌 نکته: «Flow» یه جریان «cold» هست؛ یعنی تا کسی جمعش نکنه، اجرا نمیشه.
🎯 پس هر وقت دادهای داری که بهمرور تولید میشه، «Flow» بهترین انتخابه.
بگو کدوم بخش برات مبهمه تا توی پست بعدی عمیقتر بریم.
#Codeit #Android #Kotlin #Jetpack #Flow #Coroutines #StateFlow #ReactiveProgramming
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1🔥1
🔄 ترکیب دو «Flow» با عملگر «zip» — دقیقاً مثل زیپ کاپشن!
وقتی دو جریان داده دارید و میخواهید هر جفت مقدار رو بههم بچسبونید و یه خروجی جدید بسازید، «zip» بهترین انتخاب است.
🧠 فرض کنید از دو سنسور مجزا دما و رطوبت دریافت میکنید. «zip» جفتهای همترتیب رو ترکیب میکند.
مثال عملی: ترکیب اطلاعات کاربران از دو منبع مختلف.
💻 کد ساده با «zip» در «Kotlin»:
📌 نکته: اگر تعداد جفتها نامساوی باشد، جفتهای اضافی حذف میشوند.
✅ «zip» برای ترکیب دقیق دو جریان موازی عالی است.
🎯 این عملگر رو در سناریوهای real-time فراموش نکنید.
#Codeit #Android #Kotlin #Jetpack #Flow #KotlinFlows #ReactiveProgramming
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
وقتی دو جریان داده دارید و میخواهید هر جفت مقدار رو بههم بچسبونید و یه خروجی جدید بسازید، «zip» بهترین انتخاب است.
🧠 فرض کنید از دو سنسور مجزا دما و رطوبت دریافت میکنید. «zip» جفتهای همترتیب رو ترکیب میکند.
مثال عملی: ترکیب اطلاعات کاربران از دو منبع مختلف.
💻 کد ساده با «zip» در «Kotlin»:
val flowA = flowOf("دما: ۲۵°", "دما: ۲۶°", "دما: ۲۷°")
val flowB = flowOf("رطوبت: ۴۰%", "رطوبت: ۴۲%")
flowA.zip(flowB) { temp, humidity ->
"$temp — $humidity"
}.collect { combined ->
println(combined)
}
// خروجی:
// دما: ۲۵° — رطوبت: ۴۰%
// دما: ۲۶° — رطوبت: ۴۲%
// (جفت سوم چون جفت ندارد، نادیده گرفته میشود)
📌 نکته: اگر تعداد جفتها نامساوی باشد، جفتهای اضافی حذف میشوند.
✅ «zip» برای ترکیب دقیق دو جریان موازی عالی است.
🎯 این عملگر رو در سناریوهای real-time فراموش نکنید.
#Codeit #Android #Kotlin #Jetpack #Flow #KotlinFlows #ReactiveProgramming
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤2