آموزش rxjava

آنچه در این صفحه می خوانید:

معرفی RxJava

RxJava یک اجرای VM جاوا است که از Reactive Extension استفاده می کند. در اصل این کتابخانه است که به شما کمک می کند با استفاده از جریان های قابل مشاهده برنامه های ناهمزمان و مبتنی بر رویداد را تهیه کنید. در RxJava همه چیز در یک جریان داده واکنشی است.

هنگامی که مشترک (Observer) شروع به گوش دادن به آن می کند، بخشی از داده ها را منتشر می کند. بلوک های ساختمان اصلی RxJava قابل مشاهده و ناظر هستند. می توانید جریان داده ناهمزمان را در هر موضوع ایجاد کنید. که توسط برنامه ریزان امکان پذیر است. به طور خلاصه RxJava = قابل مشاهده + برنامه ریز + Observer.

این الگوی مشاهده گر را برای پشتیبانی از توالی داده ها / رویدادها گسترش و به اپراتورهایی اضافه می کند، که این امکان را می دهد توالی ها را به صورت اعلانی تنظیم کنید، در حالی که نگرانی هایی راجع به مواردی مانند نخ سطح پایین، هماهنگ سازی، ایمنی موضوع و ساختار داده های همزمان حذف می کند.

چرا RxJava را در نظر می گیریم؟

RxJava توسعه را آسان می کند زیرا باعث افزایش سطح انتزاع در اطراف threading می شود. یعنی، به عنوان توسعه دهنده، دیگر لازم نیست نگران جزئیات نحوه انجام عملیاتی باشید که باید در موضوعات مختلف اتفاق بیفتد. این امر جذاب است زیرا درست کردن موضوع چالش برانگیز است و در صورت عدم اجرای صحیح، می تواند باعث اشکال زدایی و رفع برخی از سخت ترین اشکالات شود. واضح است که این بدان معنی نیست که RxJava ضد گلوله است و هنوز درک این مسئله که در بک اند اتفاق می افتد مهم است. با این حال، RxJava قطعاً می تواند زندگی شما را آسان تر کند.

ویژگی های RxJava

کاربران انتظار داده های real-time را دارند. آنها اکنون پست خود را می خواهند. می خواهند بلیط آنلاین خود را اکنون دریافت کنند. برنامه وب آنها باید پاسخگو باشد. شما می خواهید وقتی آماده شد نتیجه را به سمت شما سوق دهد. حتی بهتر، هنگام کار با مجموعه های نتایج، می خواهید نتایج فردی را دریافت کنید زیرا آنها آماده هستند. توسعه دهندگان ابزارهایی برای فشار داده ها دارند، این کار ساده است. توسعه دهندگان برای واکنش به فشار داده ها به ابزارهایی نیاز دارند.

Rx ابزاری قدرتمند است که می تواند مسئله را با سبکی اعلانی زیبا حل کند. Rx با برنامه نویسان کاربردی آشنا است. Rx چندین مزیت دارد:

  • Unitive:

کوئری انجام شده در Rx به همان سبک مانند برنامه نویسی تابعی، مانند جریان های جاوا انجام می شود. در Rx، تحولات سبک تابعی در جریان رویدادها استفاده می شود.

  • قابل توسعه:

RxJava را می توان با عملگرهای سفارشی گسترش داد. RxJava تمام قابلیت توسعه را ارائه می دهد.

  • اعلانی:

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

  • Composable:

اپراتورهای Rx می توانند برای تولید عملیات پیچیده تر ترکیب شوند.

  • تحول گرا:

اپراتورهای Rx می توانند یک نوع داده را به دیگری تبدیل کنند، و در صورت نیاز جریان ها را کاهش دهند، نقشه برداری یا گسترش دهند.

مزایای استفاده از RxJava

  • جریان های ناهمزمان

شما باید یک درخواست به پایگاه داده ارسال کنید، و سپس بلافاصله باید دریافت پیام و تنظیمات را شروع کنید. پس از اتمام همه چیز، به نمایش پیام خوش آمدید نیاز دارید.

  • رویکرد تابعی

اگر با برنامه نویسی کاربردی، به ویژه با مفاهیم نقشه و فشرده آشنایی داشته باشید، اداره کردن RxJava برای شما راحت تر خواهد بود. می توان گفت برنامه نویسی کاربردی شامل استفاده فعال از توابع به عنوان پارامترها و همچنین نتایج در توابع دیگر است. به عنوان مثال، نقشه تابعی از مرتبه بالاتر است که در بسیاری از زبان های برنامه نویسی استفاده می شود. برای هر عنصر موجود در لیست اعمال می شود، لیستی از نتایج را برمی گرداند.

  • ذخیره سازی آسان می شود.

قطعه کد بعد از موفقیت در اولین بار، از روش حافظه پنهان استفاده می کند.

  • اپراتورهایی با زمان بند

اپراتورهای متنوعی وجود دارد که برای عملکرد نیاز به تعیین زمان بند دارند. در عین حال، آنها روش های اضافه بار خود را دارند که از ()computation() ،delay به عنوان زمان بندی استفاده می کنند.

  • استفاده از آبجکت

با کار با Objects باید توجه داشته باشید که بطور پیش فرض توالی تغییرات داده ارسال شده به موضوع onNext در همان موضوع اجرا خواهد شد (پیاده سازی می شود)، که برای فراخوانی از روش ()Next استفاده می شد، تا مشاهده گر عملگر در این دنباله ظاهر نمی شود.

هنگامی که ما از Rx استفاده می کنیم، به ما کمک می کند:

  • بدون ایجاد کلاس های حافظه پنهان، حافظه پنهان را ذخیره کنید.
  • ترکیب دریافت درخواست و پردازش نتایج و خلاص شدن از استاندارد AsyncTask
  • کاهش نشت حافظه 90٪
  • بهینه سازی کد برای افزایش پاسخ برنامه
  • روش های ساده تر برای ترکیب

همانطور که مشاهده می کنید، استفاده از RxJava کاملاً توجیه شده است. این ممکن است مانند چرخ پنجم به نظر برسد، اما برنامه نویسان در سراسر جهان از تمایل آن برای ساده سازی و کوتاه کردن کد قدردانی می کنند. این کارآیی خود را با درخواست ها و موضوعات شبکه، پاسخ به فرآیند و جلوگیری از نشت حافظه اثبات کرده است.

مثال RxJava

محاسبات پس زمینه ساده:

یکی از موارد استفاده رایج برای RxJava اجرای برخی محاسبات، درخواست شبکه بر روی موضوع پس زمینه و نمایش نتایج (یا خطا) در موضوع UI است:

import io.reactivex.rxjava3.schedulers.Schedulers;

Flowable.fromCallable(() -> {
    Thread.sleep(1000); //  imitate expensive computation
    return "Done";
})
  .subscribeOn(Schedulers.io())
  .observeOn(Schedulers.single())
  .subscribe(System.out::println, Throwable::printStackTrace);

Thread.sleep(2000); // <--- wait for the flow to finish

این سبک از روش های زنجیر زدن به یک fluent API گفته می شود که شبیه به الگوی سازنده است. با این حال، انواع واکنشی RxJava تغییر ناپذیر است. هر یک از روش های متداول، Flowable جدید با رفتار اضافه شده را برمی گرداند برای مثال، نمونه را می توان به شرح زیر بازنویسی کرد:

Flowable<String> source = Flowable.fromCallable(() -> {
    Thread.sleep(1000); //  imitate expensive computation
    return "Done";
});

Flowable<String> runBackground = source.subscribeOn(Schedulers.io());

Flowable<String> showForeground = runBackground.observeOn(Schedulers.single());

showForeground.subscribe(System.out::println, Throwable::printStackTrace);

Thread.sleep(2000);

به طور معمول، می توانید محاسبه ها یا blocking IO را از طریق subscribeOn به برخی thread دیگر منتقل کنید. پس از آماده شدن داده ها، می توانید از طریق ObserveOn در پیش نما یا GUI پردازش کنید.

نظرتون درباره این نوشته چیه؟ عالیه بد نیست خوب نبود