برمجة الأندرويد

الـ RX بالعربية – مقدمة

مرحبا بك فى مقال جديد من هنديوير والذى اعدك انه سيكون بداية جيدة لك لفهم الـ Rx فبعد مرور اكثر من عامين على شرح عدة دروس Rx Android السابقة ومناقشة العديد من المطورين هذه الفترة لاحظت ان السبب الذى يجعل الـ Rx صعبة فى نظر البعض هو البداية الخاطئة فعند قراءة اى مقال عن الـ RX تجده يقوم بذكر التعريف ثم يبدأ بأن يخبرك باجزاء ال rx مثل ال observer وما الى ذلك ويتابع الشرح وتجد نفسك كمن يتابع طريقة تحضير الجن او جلب الحبيب للشيخة زبيدة المغربية طلاسم تتلوها طلاسم وانت لا تعرف لماذا ينبغى عليك ان تراجعها مع ان الجميع بالخارج يخبرونك انها رائعة وانها جميلة وذات فوائد عديدة فانت لاترى بها شيئا من الجمال ولا العملية ولا تنفك تكون عدة سطور قبيحة معقدة من الاكواد يقوم بعملها المبرمجون القدامى لاستعراض عضلاتهم لكن ستغير وجهة نظرك بعد متابعتك لهذه السلسلة من المقالات بعدما اعرفك على الـ rx واقدمك لها واقدمها اليك بطريقة اخرى لتتعرفون على بعضكم البعض بطريقة صحيحة فهيا بنا نبدأ .

كل شىء عباره عن Stream .

دعك الان من الـ Rx والبرمجة والاكواد ولنجلس انا وانت كما كان يجلس الفلاسفة يتفكرون فى العالم حولهم ويصفون ما يشاهدونه من الناس والاشياء ويحاولون تفسيره دعنا نفهم ما هو الـ Stream وهى كلمة اجنبية معناها بالعربية تدفق او تيار أو مجرى او سيل  ودعنا نتفق انها تدفق وحسب شىء يتدفق بشكل متتابع من مكان الى اخر مثل الماء الذى يجرى فى نهر ما واذا نظرنا الى الحياه الواقعية حولنا سنجد انها لات خلو من الـ Streams (التدفقات) عندما تضع الخرطوم فى الصنبور فيتدفق الماء عبر الخرطوم الى الجهة الاخرى من الخرطوم لتقوم برش الماء هذا يعتبر Stream تدفق قطرات المياه فى الخرطوم ، عندما تقوم انت واصدقاءك بدخول الجامعة او الخروج منها فيمكننا ان نعتبر ان هذا Stream حيث يتدفق الطلبة دخولا للجامعة طالب بعده طالب بعده طالب الخ وكذلك فى الخروج يخرجون طالبا طالبا او مجموعة مجموعة هذا يعتبر Stream ، عندما تجلس مع صديقك تتحدث فان الموجات الصوتية الصادرة من فمك تخرج على هيئة Stream متدفق من فمك الى اذن صديقك والى المارة بشكل عام اذا كان صوتك مرتفع ، انظر الى الطرق ستجد أن هناك تدفق من السيارات ذهابا وايابا سيارة وراء سيارة وراء سيارة الخ .

 

بنفس المنطق ركز فى اى شىء حولك فى العالم فيمكن ان تعتبره Stream حتى علبة البيرسول التى تقوم برش الحشرات الطائرة بها يخرج منها سائل على هيئة Stream يتدفق منها عندما تشرب يخرج الماء من الكوب الى فمك على هيئة ستريم عندما تأكل عندما تشرب  فكر فى كل الاحداث اليومية وانت جالس الان فى الحر تحت المروحة او التكييف فان الهواء يتحرك ويتدفق كـ Stream .

وفى عالم البرمجيات عندما يقوم المستخدم بفتح التطبيق ولمس الشاشة فان لمسة وراء لمسة  تعتبر Stream ، الضغطات على الازرار ضغطة وراء ضغطة وراءع ضغطة تعتبر Stream ويشيع طبعا ان تسمع عن الـ Video Stream حيث يقوم السريفر بارسال تدفق من البايتس الى جهاز المشاهد ويقوم الفيديو بلاير برمجيا بمعالجة وعرض هذه البايتس ، عندما تقوم بالحديث فى الهاتف مع احد الاشخاص فيمكننا اعتبار ان صوتك المرسل اليه Stream وصوته القادم اليك عباره عن Stream كل الاحداث يمكن بشكل أو باخر ان نعتبرها  Stream حسنا جميل فلنتابع.

 

الـ Stream والـ Rx

 

الـ rx اختصار لـ reactive extension اى التفاعل الامتداداى او ايا يكن الترجمة لكن هى مجرد طريقة او اسلوب برمجى معين يعطينا القدرة على تحويل الاشياء الى Stream والتعامل معها والتحكم بها على أنها Stream بمعنى انه فى حالة ضغط الازرار داخل التطبيقات على الموبايل  او عمل call للويب لجلب الاخبار او اى حدث تقوم به فى البرمجة العادية يعتبر حدث عادى onClickListener مثلا  عند الضغط على الزر عباره عن حدث يتم تنفيذه بشكل عادى وليس Stream اى لا تتم معاملته من قبل الجافا على انه Stream انها مجرد ميثود يتم تنفيذها عند الضغط على الزر فى الاندرويد  وتنفذ حدث معين ، الـ call الخاص بالويب بأى مكتبة تستخدمها للاتصال هو عباره عن حدث عادى يتم ارسال بيانات للسيرفر واستقبال بيانات وانتهى الامر ، عند عمل حقل للبحث ومراقبت التغيرات التى تحدث فى الـ EditText عن طريق الـ TextWatcher يتم مراقبتها بشكل عادى على انها احداث متتالية فهى فلسفيا وفكريا تعتبر ستريم لكن برمجيا امامك وفى تعاملك معها هى مجرد حدث يتم وتنادى الميثود فى الـ textwatch  لكن الـ RX تمنحنا القدرة على تحويل الزر بدلا من انه حدث واحد الى Stream وتحويل الاتصال بالـ Server الى Stream وكذلك تحويل الـ TextWatchEvent الى Stream  لكن ما الفارق ؟ ما الذى سيحدث او استعطت تحويل الكود العادى الخاص بالزر الى Stream وكذلك الـ textWatch او اى شىء اخر الى Stream ما الذى سأستفيده ؟

 

قوة الـ Stream

اذا اعطيت القدرة للتحكم فى Stream فسيمكنك  تحويل وتحوير هذا الـ Stream باى طريقة تريدها وهو محور أو نقطة القوة فى Rx وهى التحكم فى الـ Stream فهى تمكنك من تحويل الشىء الى Stream ومن ثم القدرة على التحكم فى هذا الـ Stream مثل ماذا التحكم فى الـ Stream ؟

مثل تجاهل اجزء من هذا الـ Stream مثلا فى مثال ضغط المستخدم على الزر يمكننا تجاهل الضغطات المتتالية السريعة الا يحدث احيانا ان يضغط المستخدم زر ما  4 او 5 مرات متتالية وبالتالى فسيتم تنفيذ الكود الخاص بضغطات هذا الزر 4 او 5 مرات لكن التحكم فى الـ Stream سيعطينا هنا القدرة على تجاهل باقى الضغطات واذا توقف المستخدم عند الضغط لمدة ثانيتين مثلا حسب ما نحدد نحن ثم ضغط مرة اخرى نسمح له بالضغط ونستقبل الضغطة بشكل عادى

 

مثل التحكم فى حقل البحث احيانا يكون لديك حقل للبحث وتقوم بادخال البيانات فيتم ارسال request البحث للسيرفر ليجلب البيانات وبالتالى تقوم بعمل textwatch يقوم بمناداة الميثود ontextchanged كل مرة يتغير المكتوب وبالتالى كل مرة يكتب المستخدم حرفا تقوم بارسال request بحث واذا مسح حرفا تقوم بارسال request بحث فيصبح الامر فوضى كبيرة اما اذا عاملنا حقل البحث او الـتغير فى هذا الـ Edittext فى حروفه على انه Stream نستطيع ببساطة تحليل سلوك المستخدم وعدم اجراء request البحث الا اذا توقف المستخدم عند الكتابة وانه طالما يقوم المستخدم بالكتابة فلا نرسل الـ request اذا توقف عن الكتابة لمدة ثانية نرسل ال request وبالتالى كـ Stream تحكمنا فيه بشكل كبير جدا بدلا من تركه هكذا يضيع الموارد.

 

مثل التحكم فى الـ requests الخاصة بالـويب فأحيانا يكون لديك عدة requests معتمدة على بعضها البعض او تحب ان تدمجهم فى النهاية للحصول على نتيجتهم معا بهذه الحالة معاملتهم كـ Stream تتيج لك دمجهم والتعديل عليهم وتنفيذهم بشكل متتالى او متوازى او ترتيبهم وترتيب اتصالاهم بالانترنت باى ترتيب تحب وعمل تحوير وتعديل للبيانات وهى تتدفق باى شكل تحب

إنها قوة كبيرة تمتلمها اذا استطعت ان تحول هذه الاشياء الى Stream

عودة الى الحياة الواقعية لو استطعنا تحويل السيارات فى الشارع الى Stream فسيمكننا التحكم فى قوة تدفقها وتنظيم التدفق المرورى وحل مشكلة المرور بـ RxTrafic سيكونو قد قامو بعملها حينها 😀  واذا استطعنا تحويل الكلام الى Stream فيمكننا عمل فلتر واستبعاد اى كلام مؤذى نفسيا للاخرين وبالتالى RxSpeech سيحل مشكلة كبيرة فى التحدث بين الناس وطبق على ذلك الكثيير لكن للاسف ليس لدينا القدرة على تحويل الكائنات والاحداث فى الحياة الواقعية الى Streamsوالتحكم بها لكن عزائنا الوحيد اننا نستطيع ذلك برمجيا وفى اى لغة برمجة تقريبا ولذلك تجد RxJava,RxAndroid,Rxphp,RxSwift,Rx…. الخ كلها تعتمد على مبدأ واحد وهو اعطائك القدرة على تحويل اى احداث فى الcode الى Streams والتحكم فيها.

 

الى هنا اعتقد انه اصبحت لديك فكرة عن الـ Rx وماذا تفيدنا بشكل عام ومختصر وفى المقالات القادمة سنبدأ بالتعرف على كيف نستخدم الـ Rx بشكل فعلى ونبدأ فى الاحتكاك بالكود.

 

السابق
برمجة لوحة التحكم – الجزء 5

4 تعليقات

أضف تعليقا

  1. Mohamed Hamdan قال:

    شكرا كثير على الشرح ولكن الى الان لم افهم لماذا يجب ان تستخدم rx مع ان الجافا تحتوي على Stream يمكنني استخدامه وعمل اشياء كثيرة مثل ما تقوم به ال rx

  2. mohamed abo saged قال:

    جزاك الله خيرا … فى انتظار القادم ان شاء الله .

  3. javatar قال:

    مفيش حاجة عن الديزاين باترن و الدبندسي انجكشن

اترك تعليقاً

This site uses Akismet to reduce spam. Learn how your comment data is processed.