RxJava کتابخانه ایست برای برنامه نویسی بصورت Reactive. خود Reactive Programing هم میشه اینطور در نظر گرفت که روش برنامه نویسی بر اساس یک واقعه یا Event است. نمی دونم چقدر با Event و یا Reactive programing آشنایی دارید اما اگر بخوام به زبان ساده بگم Event این هست که یک واقعه رخ میده و بعضی کلاس ها و آبجکت ها نسبت به اون واقعه حساسند و متوجه اون واقعه می شوند. فرض کنید بابای خونه نسبت به روشن کردن کولر ( ایونت روشن شدن کولر) حساسه و هروقت اتفاق میافته به محض مطلع شدن عکس العمل مناسب و نشون میده! البته این یک شوخی بود اماواقعیت قضیه همینه.
RxJava کتابخانه ایست برای برنامه نویسی بصورت Reactive در جاوا. خود Reactive Programing چیه؟ Reactive Programing روش برنامه نویسی بر اساس جریان داده و تغییرات روی آن بر اساس یک واقعه یا Event است. نمی دونم چقدر با Event و یا Reactive programing آشنایی دارید اما اگر بخوام به زبان ساده بگم Event این است که یک واقعه رخ می دهد و بعضی کلاس ها و آبجکت ها نسبت به آن واقعه حساسند و متوجه آن می شوند. فرض کنید بابای خونه نسبت به روشن کردن کولر ( ایونت روشن شدن کولر) حساسند و هروقت اتفاق میافتد به محض مطلع شدن عکس العمل مناسب را نشان می دهند! البته این یک شوخی بود اما واقعیت قضیه همین است. در ادامه موضوع رو بیشتر باز می کنم.
RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.
خیلی خوب، گفتم که برای برنامه نویسی بصورت Reactive در جاوا باید از RxJava استفاده کنیم. یک کامینوتی به نام ReactiveX است که تقریباً برای تمامی زبان های برنامه نویسی مطرح، کتابخانه داده تا بتوان در آنها از امکانات Reactive استفاده کرد. مثلاً RxKotlin ،RxDart ،RxScala ،RxPHP و…. شاید بپرسید پس RxAndroid چیه؟ آیا اون هم پیاده سازی Reactive در اندرویده؟ اینجا باید بگم خیر! RxAndroid جای گزین RxJava برای اندروید نیست. بلکه افزونه ای است متشکل از مجموعه ای از ابزار های Rx برای اندروید برای RxJava . یعنی ما در اندروید از RxAndroid به تنهایی نمی تونیم استفاده کنیم و باید در کنارش حتماً RxJava باشه. فکر می کنم در جلسات بعدی که میریم سراع مثال این مسائل این دو وابستگی را در کنار هم در Gradle مشاهده خواهید کرد.
پیش نویس این مقاله رو بیش از دو سال پیش شروع کردم. موقعی که هنوز استفاده از RxJava و RxAndroid خیلی باب نشده بود. منتهی لازم دیدم که هرچه زود تر به این مبحث بپردازم و تا سریعتر بتونم وارد مباحث معماری بشم که خیلی بکارمون میاد و کمکمون می کنه. احتمالاً RxJava رو بتونم در دو یا سه جلسه تمومش کنم و امیدوارم براتون مفید باشه.
از تعاریف که بگذریم می رسیم به منطق و مفهوم کار: به نظر خود بنده Reactive Programming پیاده سازی Observer pattern در سطح برنامه نویسی است. همانطور که در ادامه مشاهده خواهید کرد، یکی از مفاهیمی که بسیارمورد استفاده در Reactive هست مفهومی به نام Observer یا نظاره گر است. پس لازم است که ببینیم این دیزاین پترن دقیقاً چی می خواد بگوید.
Observer pattern
داستان اینطوریه که کلاً سه تا مفهوم داریم. یکسری موضوع یا Subject داریم که حالت یا State خاص دارند و یک تعدادی نظاره گر یا Observer هستند که به تغییر State این Subject ها علاقه مند هستند. پس خود را برای تغیرات حالت موضوع مورد نظر مهیا می کنند و در هر تغییر حالت، این تغییر با مکانیزمی به آنها اطلاع داده شود.
در این مثال ما پدر نسبت به روشن شدن کولر حساس است و تا کولر روشن می شود آن را خاموش می کند. از طرفی روشن شدن کولر برای مادر یا فرزند اهمیتی ندارد. همینطور بوی سوختن غذا فقط برای مادر مهم است و بعد از شنیدن آن به سرعت خودش و به آشپزخانه می رساند، در صورتی که برای پدر و فرزند معنی خاصی ندارد و اصلا متوجهش نیستند. ( البته مثال خیلی انتزاعی است). RxJava هم به همین صورت است. یعنی اتفاقات و event ها بر اساس وارد شدن و یا تغییر اطلاعات فعال می شوند و یک تعدادی کلاس به آنها واکنش نشان می دهند.
حالا که پترن Observer را برسی کردیم می خواهیم مفاهیم متناظر آن در RxJava را ببینیم.
برای ملاحظه مقاله کامل به سایت بایت کد مراجعه کنید.