آموزش RxJava
در سری مقالات آموزش جاوا, به مبحث RxJava میپردازیم.
همانطور که در سایت ReactiveX تعریف شده است, با استفاده از ReactiveX میتوان برنامه های asynchronous وEvent Base ایجاد کرد. اطلاعات به محض ورود مورد استفاده و پردازش قرار میگیرند. به همین علت به آن Reactive Programming نیز گفته میشود. در Reactive, اطلاعات مهم ترین بخش کار هستند و دیگر درگیر چالش هایی مانند I/O,Synchronization, Low level Threading نمیشویم. بهتر است پیش از شروع RxJava مبحث Lambda را مطالعه کنید. برای مشاهده مقالات Lambda به اینجا مراجعه کنید.
اولین مبحث RxJava پیرامون Observable ها است. Observable ها دنباله ای از asynchronous event ها است که پردازش ها روی آنها اعمال میشود. تا حدودی میتوان Observable ها را مشابه Array ها دانست که عناصر آن از نوع asynchronous event است. در نسخه RxJava 2.0 پنج نوع از کلاس های Observable ارائه شده است:
در ابتدا نیاز است تا RxJava را به پروژه اضافه کنیم. Maven Dependency آن به این صورت است:
<dependency> <groupId>io.reactivex.rxjava2</groupId> <artifactId>rxjava</artifactId> <version>2.0.8</version> </dependency>
و Gradle Depdenency آن نیز به این صورت است:
compile 'io.reactivex.rxjava2:rxjava:2.0.8'
برای تعریف Observable چندین متد وجود دارد که با مثال به بررسی هریک از آنها میپردازیم. اولین متد create است. در این متد میتوان به صورت پویاعناصر را تعریف کرد. فرض کنید میخواهیم یک لیست از اسامی را درون یک Observable قرار دهیم:
public class Rx { public static void main(String[] args) { Function<String, User> userFunction = User::new; List<User> users = Arrays.asList(userFunction.apply("Vahid"), userFunction.apply("Ali"), userFunction.apply("Amir"), userFunction.apply("Mohammad"), userFunction.apply("Moein"), userFunction.apply("Kazem")); Rx rx = new Rx(); rx.initObservableWithCreate(users); } private void initObservableWithCreate(List<User> names) { Observable<String> obsvrName = Observable.create(observe -> { try { for (User name : names) { observe.onNext(name.getUsername()); } observe.onComplete(); } catch (Exception e) { observe.onError(e); } }); } }
در متد create با استفاده از متد onNext عناصر را به Observable اضافه میکنیم. متد onComplete پایان کار را مشخص میکند و متد onError کنترل خطا را بر عهده دارد.
میتوان با استفاده از متد just مقادیر را به صورت مستقیم درون observable تعریف کرد
private void initObservableWithJust() { Observable<String> obsvrName = Observable.just("Vahid", "Ali", "Amir", "Mohammad", "Moein", "Kazem"); }
همچنین متد های دیگری نیز وجود دارد که لیست آنها را میتوانید از اینجا مشاهده کنید.
پس از ایجاد Observable باید بوسیله Subscribing پردازش را روی مقادیر آن انجام دهیم
private void initObservableWithCreate(List<User> names) { Observable<String> obsvrName = Observable.create(observe -> { try { for (User name : names) { observe.onNext(name.getUsername()); } observe.onComplete(); } catch (Exception e) { observe.onError(e); } }); obsvrName.subscribe(this::process, this::fail, this::complete); } private void process(String user) { System.out.println(user + " Welcome "); } private void fail(Throwable throwable) { System.out.println(throwable.getMessage()); } private void complete() { System.out.println("Done"); } }
به این ترتیب مقادیر را برای ما چاپ میکند. بسیاری از پردازش ها و فعالیت ها مانند filter,map و … همانند Lambda است و میتوان در RxJava نیز از آن استفاده کرد. برای استفاده از Reactive Programming نیاز است تا ساختار و چگونگی آن را درک کنیم. هدف از این مقاله نیز آشنایی با ساختار Reactive programming و همچنین شیوه ارتباط پردازش بر روی اطلاعات است. متناسب پروژه ها, متد های گوناگونی از Reactive مورد استفاده قرار میگیرد و مطمئنا نمیتوان شیوه استفاده از تمام متد ها را در یک مقاله گنجاند. اما مقدماتی که در این مقاله ذکر شد, تقریبا میتواند پایه تمام پروژه ها باشد. از این پس سعی میکنیم تا در مقالات اندروید و جاوا بیشتر از RxJava استفاده شود تا درک بهتری از این شیوه برنامه نویسی بدست آید.
مطالب زیر را حتما مطالعه کنید
از Java به Dart – کلاس و Constructor
آموزش Gradle – اهمیت Project Automation
تفاوت Sequence و List در کاتلین
بهترین محیط های توسعه(IDE) برای جاوا
Open/Closed Principle در قوانین Solid
توابع در زبان برنامه نویسی Kotlin
2 Comments
Join the discussion and tell us your opinion.
دیدگاهتان را بنویسید لغو پاسخ
برای نوشتن دیدگاه باید وارد بشوید.
و پنج نوع از کلاس های Observable چین؟
اینایی که شما زحمت کشیدین بدون فارسی هم میشد راحت بهشون رسید. شرط توضیح عملکرد و مواردی هستش که اونجا توضیح داده شده که شما فقط لینک دادید
سلام دوست عزیز. هر پنج نوع بر پایه Observable ساخته شدن. و هرکدوم امکانات متفاوتی دارند. Observable که ساختار پیش فرض هست و توضیح داده شده. Single بجای رشته از Observer ها, فقط یک Observer به عنوان نتیجه برمیگردونه و در حالت صفر و یک میشه در نظر گرفتش. یعنی یا نتیجه داره یا خطا برمیگردونه. Flowable همون Observable هست ولی برای داده ها با حجم و تراکنش بیشتر. وقتی از Completable استفاده میشه, دو حالت fail و Complete فقط مشخص میشه و عملا برای اینکه که نشون بده یک پردازش به خطا خورده یا نه. Maybe هم ترکیب Single و Completable هست.