وقتی قرار شد توی پادکست کاتلین فارسی در مورد Coroutine صحبت کنم، تصمیم گرفتم در موردش عمیقتر بدونم. برای همین از یه روشی استفاده کردم که قبلا باهاش Dagger و RxJava رو یاد گرفته بودم. روش سادهای هست، این مدلیه که موضوع رو باید انتخاب کرد، بعد باید توی یه مدت کوتاه و بصورت فشرده هرچی ویدئو و مقاله مرتبط به موضوع توی یوتیوب و مدیوم و … هست رو دید یا خوند. حتی اگر چیزی ازشون نشه متوجه شد هم اشکال نداره و باید باز ادامه داد. اوایلش یه مدت اذیت کننده هست ولی یهو از یه جایی به بعد همه اطلاعاتی که پراکنده از منابع متفاوت خونده شدن، بهم لینک میشن و شبیه کارتونهای دوران بچگی، یه لامپ گنده توی مغز آدم روشن میشه.
برای همین منم رفتم یوتیوب و هر ارائهای که توی عنوانش Coroutine رو داشت دیدم، حالا چه کنفرانس قدیمی بود (مثل Kotlin Confهای گذشته) یا حتی به اندروید مرتبط نبود (مثل یکی دو تا فیلم در مورد استفاده از Coroutine توی Spring). نتیجه راضی کننده بود و کلی چیز جالب در مورد Coroutine و Flow یادگرفتم. وقتی ارائههارو میدیدم، اونایی که دوست داشتمو یا یکم توضیح توی یه فایل مینوشتم، چون بنظرم شاید بدرد بقیه هم بخوره، در ادامه چیزهایی که برای خودم توی اون فایل نوشته بودمو با یکم تغییر مینویسم:
ارائه KotlinConf 2017 - Introduction to Coroutines
https://www.youtube.com/watch?v=_hfBv0a09Jc
برای شروع ارائه خوبیه. البته من خیلی قدیم یبار همینجوری دیده بودمش ولی بهش دقت نکرده بودم و خیلی درکش نکرده بودم. اما این سری با تمرکز بالا دیدمش و متوجه شدم که خیلی خوب توضیح میده. میتونه دریچهی ورود به coroutine باشه. ارائه دهنده اسمش Roman Elizarov هست، هرچی ارائه و مقاله از این نفر دیدید بخونید، هرچی. تک تک ارائه و مقالههاش فوقالعاده هستند. ۲ تا ارائه بعدی هم از همین نفره.
ارائه KotlinConf 2017 - Deep Dive into Coroutines on JVM
https://www.youtube.com/watch?v=YrrUCSi72E8
این فیلم فوقالعاده هست. خیلی خوبه. هر چی بگم کم گفتم. توی این ارائه در مورد این صحبت میشه coroutine چطوری پیاده سازی شده و چطوری این همه کار عجیب و غریب رو میکنه، واقعا جذابه. تا قبل از این که اینو ببینم coroutine رو خیلی خوب درک نمیکردم و فقط میدونستم چیه. ولی تازه بعد دیدن این فیلم فهمیدم چطوری کار میکنه و چطوری اون کد async رو میتونیم به شکل sync بنویسیم.
ارائه KotlinConf 2018 - Kotlin Coroutines in Practice
https://www.youtube.com/watch?v=a3agLJQ6vt8
توی این ارائه Elizarov یه سیستم دانلود رو با coroutine پیاده میکنه. از همه چی توش استفاده میکنه مثل channel و … . یه قسمتش در مورد پیاده سازی coroutinescope صحبت میکنه و اینکه فرق بین متدهای suspend و scope چیه.
ارائه Understand Kotlin Coroutines on Android (Google I/O'19)
https://www.youtube.com/watch?v=BOHK_w09pVA
این ارائه اولش از این نظر مهمه که میگه چرا با وجود Rx و Livedata گوگل این همه پیگیر coroutine شده. بعدش یکم در مورد اینکه coroutine چطور کار میکنه میگه. در ادامه در مورد این میگه چرا اصن بهتره اگر workermanager استفاده میکنیم از اون مدلش که با coroutine کار میکنه استفاده کنیم. بعدش در مورد scopeهای از پیش آماده شده توی اندروید مثل viewmodelScope و … حرف میزنه و در آخر LiveData block رو میگه که چطوری کار میکنن و lifecycleش چطوره
ارائه KotlinConf 2019: Asynchronous Data Streams with Kotlin Flow
https://www.youtube.com/watch?v=tYcqn48SMT8
این ارائه در مورد Flow خیلی خوبه. فرقشو با channel میگه و در ادامه توضیحش میده و با RxJava اینام مقایسهاش میکنه. اگر RxJava بلد باشید، خیلی راحت میتونید با این ارائه Flow رو درک کنید.
ارائه LiveData with Coroutines and Flow (Android Dev Summit '19)
https://www.youtube.com/watch?v=B8ppnjGPAGE
اینم خیلی خوبه، اولش از coroutine شروع میکنه و ترکیبشو با livedata اینا میگه. اینکه چطور بجای اینکه خودتون اینترفیس coroutine scope رو پیاده کنید، میتونید از scopeهای اندروید مثل viewodelScope و … استفاده کنید.
آخرش Flow رو میگه و میگه توی پترنهای مختلف چطوری میشه ازش توی لایههای مختلف ViewModel و Repository و … استفاده کرد. برای کسایی که میخوان توی اندروید از Coroutine استفاده کنن واقعا مفیده.
ارائه KotlinConf 2019: Coroutines! Gotta catch 'em all!
https://www.youtube.com/watch?v=w0kfnydnFWI
توی این ارايه هم در مورد coroutinescop و context و بقیه چیزا صحبت میشه. و چیزی که خیلی در موردش صحبت میشه، نحوهی cancel شدن و هندل کردن exceptionها توی Coroutine هست.