آشنایی با برنامه نویسی واکنش گرا RxJava، RxAndroid در اندروید
برنامهنویسی اندروید در سالهای اخیر تغییرات زیادی داشته و یکی از مهمترین این تغییرات، ورود سبک برنامهنویسی واکنشگرا (Reactive Programming) است. در این مقاله سعی میکنیم بهصورت ساده، مفهومی و قابلفهم با دو ابزار مهم این حوزه یعنی RxJava و RxAndroid آشنا شویم.
برنامهنویسی واکنشگرا چیست؟
به زبان ساده:
بهجای اینکه ما مدام دنبال تغییرات بگردیم، سیستم خودش به ما خبر میدهد.
فرض کن یک دکمه داری. در روش معمولی، تو باید چک کنی که آیا کاربر روی آن کلیک کرده یا نه.
اما در برنامهنویسی واکنشگرا:
👉 به دکمه میگویی:
«هر وقت کلیک شد، این کار را انجام بده»
یعنی:
- همهچیز بر اساس جریان داده (Stream) است
- و ما فقط به تغییرات واکنش نشان میدهیم
🔹 RxJava چیست؟
RxJava یک کتابخانه برای جاواست که کمک میکند با دادهها بهصورت جریان (Stream) کار کنیم.
سادهتر بگیم:
RxJava یعنی:
- دریافت داده
- انجام عملیات روی داده
- واکنش به نتیجه
RxAndroid چیست؟
RxAndroid نسخه مخصوص اندروید از RxJava است.
چرا مهمه؟
چون در اندروید:
- یک Thread اصلی (UI Thread) داریم
- و باید کارهای سنگین را در Thread جدا انجام دهیم
RxAndroid کمک میکند:
- مدیریت Threadها خیلی ساده شود
- بدون دردسر به UI برگردیم
مفاهیم اصلی Rx (خیلی مهم!)
1. Observable (منبع داده)
چیزی که داده تولید میکند
مثال:
- درخواست اینترنت
- کلیک کاربر
- خواندن فایل
2. Observer (دریافتکننده)
کسی که داده را دریافت میکند
3. Subscription (اتصال)
اتصال بین Observable و Observer
4. Operator (عملگرها)
ابزارهایی برای تغییر داده
مثلاً:
map→ تغییر دادهfilter→ فیلتر کردن
یک مثال ساده
فرض کن میخواهیم لیستی از اعداد را پردازش کنیم:
Observable.just(1, 2, 3, 4, 5)
.filter(number -> number % 2 == 0)
.map(number -> number * 2)
.subscribe(result -> System.out.println(result));
چه اتفاقی افتاد؟
- دادهها تولید شدند:
1 تا 5 - فقط اعداد زوج انتخاب شدند:
2 و 4 - هر کدام ضربدر 2 شد:
4 و 8 - چاپ شدند
👉 خیلی تمیز، بدون if و حلقه پیچیده!
مدیریت Threadها (جادوی RxAndroid)
در اندروید خیلی مهم است:
- کار سنگین → background thread
- نمایش نتیجه → main thread
مثال:
Observable.fromCallable(() -> {
return "Data from server";
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(data -> textView.setText(data));
توضیح ساده:
subscribeOn→ کار در پسزمینهobserveOn→ نتیجه در UI
🔹 چرا RxJava مهم است؟
مزایا:
✅ کد تمیزتر
✅ مدیریت راحت async
✅ جلوگیری از Callback Hell
✅ قابل ترکیب بودن عملیاتها
✅ مناسب برای API و دیتابیس
🔹 چه زمانی از Rx استفاده کنیم؟
وقتی:
- با API کار میکنی
- چند عملیات پشت سر هم داری
- دادهها تغییر میکنند
- میخواهی کد تمیز و قابل نگهداری باشد
🔹 آیا Rx سخت است؟
اوایل:
❌ بله، کمی گیجکننده است
اما بعد:
✅ خیلی قدرتمند و لذتبخش میشود
🔹 مقایسه با روش معمولی
| روش سنتی | RxJava |
|---|---|
| Callback زیاد | کد خطی و تمیز |
| مدیریت سخت Thread | ساده |
| خوانایی کم | خوانایی بالا |
🔹 نکات مهم برای یادگیری
- اول مفاهیم را بفهم، نه حفظ کردن کد
- با مثالهای ساده شروع کن
- کمکم به پروژه واقعی اضافه کن
جمعبندی
اگر بخواهیم خیلی خلاصه بگوییم:
👉 RxJava یعنی:
«با دادهها مثل یک جریان رفتار کن»
👉 RxAndroid یعنی:
«این جریان را در اندروید هوشمند مدیریت کن»