شر نوشته ی یک developer

آموزش RxJava  قسمت 0

آموزش RxJava قسمت 0

یک هیستوری کوتاه از ReactiveX , RxJava

برنامه نویسی درباره حل مسائل و مشکلاته, و وقتی شیء گرایی اومد ,آنالیز و حل یک مشکل رو خیلی آسون کرد و ما هنوز ازش استفاده میکنم.

ولی به مرور زمان کسب و کار ها و برنامه ها پیچیده تر شدند و وقتی سال 2010 رسید, برنامه نویسا به این نتیجه رسیدند که شیء گرایی فقط بخشی از مشکلات رو حل میکنه.

مشکل اینجا بود که در برنامه های پیشرفته تر تعاملات بین شیء ها هم بیشتر و برنامه نویسی سخت تر میشد.

بعد Functional Programming اومد تا جای خالی رو پر کنi و متمم شیء گرایی باشه. ولی کافی نبود

 

یک رویکرد تابع گرای رخداد محور شروع به جلب توجه کرد. چند تا فریمورک واکنشگرا هم ساخته شدند مثل AKKa و  Sodium.

 

اما در مایکروسافت یک برنامه نویس به اسم Erik Meijer یک فریموورک واکنش گرا برای دات نت ساخت که  بهش Reactive Extensions  میگفتند.

و طی چند سال اخیر برای چند زبان و فریموورک ساخته شد. مثل JavaScript, Python, C++, Swift,  and Java

توی 2014 نسخه reactiveX جاوا نوشته شد, RxJava 1, بعدا هم توی 2016 نسخه دوم منتشر شد.

و تا الان همه ی زبان ها و فریموورک ها تحت jvm پشتیبانی شده. RxScala , RxGroovy, RxKotlin,RxAndroid,RxJava-JDBC,RxJavaFX 

 

RxJava بیشتر از یک کتابخانه است و بخش از اکوسیستم واکنشی است و بطور کلی یک رویکرد برنامه نویسی رو ارائه میده.

ایده اصلی ReactiveX اینه "events are data and data are events" یعنی رخداد ها دیتا هستند و دیتا رخداد ها.

 

بینش واکنشی

به جهان نگاه کنید , میبیند همه چیز در حال جنبش و حرکت هستند. زمین , آدم ها , حساب بانکی و آب و هوا و ... حتی یک سنگ هم در حرکته بدلیل حرکت کره زمین.

اگه در نظر بگیریم که همه چیز رو میشه مدل کرد بنا به حرکت , به عنوان برنامه نویس این یک کار نشدنی و خیلی سخته.

 

مسئله دیگه اینه که همه ـی ای رخداد ها غیر هم زمان هستند , و به هم تاثیر دارند.

همونجور که گفتیم برنامه نویسی واکنشی درباره جریان هایی از اطلاعات و رخداد هاست.

یک دونده و یک ماشین رو دو جریان جدا از دیتا درنظر میگیریم ممکنه که این دو با هم واکنش داشته باشند.

 

برای نوشتن برنامه های واکنشی توی جاوا میتونیم از callback ها و ابزار ها concurrency استفاده کنیم ولی

با RxJava خیلی راحت تره و مظمئن تر.

 

دوباره به جهان نگاه کنیم . خیلی چیز ها هستند که استاتیک هستند مثل کتاب یا یک سی دی آهنگ , ولی از دیدگاه دیگه ای یک کتاب یک دنباله (جریان) از کلماته.

ماشین و دونده هردو حالت و خواص(پراپرتی) های خودشون رو دارند ولی همچنین حرکت هم دارند. کتاب و سی دی هم وقتی که مصرف میشن به حرکت درمیان.

 

با ترکیب کردن رخداد ها و دیتا بهتر میشه که دنیا رو میشه طبیعی تر مدل سازی کرد

 

چرا باید RxJava یاد بگیریم؟

why reactive

اگر میخواهید برنامه های واکنش گرا یا واکنشی یا Reactive بسازید , بهترین راه RxJava

مثال برای اندرویدیها

سیستم عامل اندروید رو در نظر بگیرید

- ورودی های کاربر 

- تراکنش های اینترنتی

- تراکنش های io (ورودی و خروجی فایل) 

- پردازش گر 

این موارد همه Asyncronous یا غیر هم زمان و Blocking یا قلف کننده هستند.

یعنی معلوم نیست که

- کاربر کی کلیدی رو میزنه

- کی اینترنت به درخواست شما جواب میده

- یک فایلی با چه سرعتی لود میشه

- cpu یک مسئله رو در چقدر زمان پردازش میکنه

 

برنامه های اندروید بطور پیشفرض روی یک Thread به اسم MainThread اجرا میشن. و هر کدوم از موارد بالا ممکنه باعث بشه تا مین ترد بلاک بشه و به اصلاحی UI فریز بشه.

و اگر شما عملیاتی که ممکنه میت ترد رو بلاک کنه در مین ترد اجرا کنید خود فریموورک به شما گیر خواهد داااد.

راه حل هایی برای دور زدن این قضیه هست. مثل AsyncTask  که عملیات شما رو توی یک ترد دیگه انجام میده و عملیات شما رو Asynconous یا غیر هم زمان انجام میده.

ولی همونطور که اول گفتیم در برنامه های پیچیده , کار سخت تر میشه مثلن و مسائلی مثل Callback Hell پیش میاد.

callback hell

RxJava همه ی این کار ها رو بصورت غیر هم زمان انجام میده به راحتی. RxJava فواید دیگه ای هم داره زیاد دیگه ای هم داره که میگم در آینده

 

 

کی و کجا از RxJava استفاده کنیم؟

همیشه و همه جا. به همه چیر با رویکرد واکنشی نگاه کنید. تنها راه استادی در برنامه نویسی واکنشی اینه که برنامه ها رو از صفر واکنشی بسازید.

به همه چیر به دید Observable نگاه کنید. همیشه برنامه اتون با کلمات data , event Flow مدل کنید. وقتی اینکارو کردید میبینید که برنامه نویسی واکنشی همه چیز برای ارائه داره و "کیفیت برنامه های شما به طور چشم گیری افزایش می یابد"

 

وقتی که استاد برنامه نویسی واکنشی شدید , اونوقت میتونید تشخیص بدید که کجا رویکرد واکنشی مناسب نیست.

۰ نظر موافقین ۰ مخالفین ۰

برعکس کردن یک استرینگ در جاوا - تمرین

با استفاده از کلاس Stack یک استرینگ را برعکس کنید.

۰ نظر موافقین ۰ مخالفین ۰

الگوریتم بازی سنگ کاغذ قیچی در جاوا - تمرین

نمونه کد ساده بازی سنگ کاغذ قیچی در زبان جاوا

۰ نظر موافقین ۰ مخالفین ۰

الگوریتم ساخت پسورد تصادفی در جاوا - تمرین

برنامه ای بنویسید که یک پسورد شش کارکتری از کارکتر های تصادفی تولید کند.

۰ نظر موافقین ۰ مخالفین ۰

الگوریتم تولید اعداد تصادفی در جاوا - تمرین

1.برنامه ای بنویسید که چند عدد تصادفی سه رقمی تولید و چاپ کند.

2.برنامه ای بنویسید که بصورت تصادفی 1 یا -1 تولید کنید.

3.برنامه ای بنویسید که یک عدد بصورت تصادفی از رنج های مختلف تولید کند.(مصلن بین 1 تا 10 و بین 50 تا 60 )

4.برنامه ای بنویسید که چند عدد اعشاری بین -1 و 1 بصورت تصادفی تولید و چاپ کند.

5.برنامه ای بنویسید که یک عدد تصادفی بین دو عدد دلخواه تولید کند.

6.برنامه ای بنویسید که اعداد تصادفی خیلی بزرگ تولید کند.(50 رفم مصلن)

7.برنامه ای بنویسید که پنج عدد تصادفی و غیر تکراری تولید کند.

۰ نظر موافقین ۰ مخالفین ۰

الگوریتم تولید دنباله فیبوناچی در جاوا - تمرین

برنامه ای بنویسید که دنباله فیبوناچی را چاپ کند, با استفاده از حلقه.

۱ نظر موافقین ۰ مخالفین ۰

پارس کردن عبارت ریاضی و حل آن در جاوا - تمرین

دو استرینگ  "(100 % 6)* 7"و  "3*3+3" را پارس و محاسبه کنید.

۰ نظر موافقین ۰ مخالفین ۰

الگوریتم اعداد اول در جاوا - تمرین

اعداد اول کوچکتر از هزار را چاپ کنید.

۰ نظر موافقین ۰ مخالفین ۰

تولید عدد تصادفی در جاوا - تمرین

اعداد تصادفی در بازه های مشخص تولید کنید.

۰ نظر موافقین ۰ مخالفین ۰

محاسبه عبارت ریاضی استرینگ در جاوا - تمرین

استرینگ "1 + 2" را محاسبه کنید.

۰ نظر موافقین ۰ مخالفین ۰