سلسلة تعليم برمجة تطبيقات الأندرويد (الدرس الثامن والعشرون) - العلم نور

عاجل

{ وَقُلْ رَبِّ زِدْنِي عِلْمًا }

السبت، 20 يوليو 2019

سلسلة تعليم برمجة تطبيقات الأندرويد (الدرس الثامن والعشرون)


سلسلة تعليم برمجة تطبيقات الأندرويد
الدرس الثامن والعشرون

مرحبا بكم في درس جديد من دروس سلسلة برمجة تطبيقات الأندرويد التعليمية، سنتابع في درسنا هذا ما كنا قد قمنا به في الدرس السابق، حيث كنا قد أنهينا الكود البرمجي للواجهة الأولى وبدأنا بكتابة الكود البرمجي للواجهة الثانية والذي سيستقبل القيم المنقولة من الواجهة الأولى وكان الكود على الشكل التالي:

Bundle extras = getIntent().getExtras();

String val1,val2;

  int val3,val4;

  if(extras != null) {

    val1 = extras.getString("Name");

    val2 = extras.getString("Item");

    val3 = extras.getInt("Count");

    val4 = extras.getInt("Total");

}

وكنا قد شرحنا وظيفة السطر الأول من الكود البرمجي أما السطر الثاني ففيه قمنا بتعريف متغيرين من النوع String الذي يمثل السلاسل الحرفية والسبب في ذلك هو أن أول قيمتين نريد أن نستقبلهما هما اسم الشخص واسم المنتج الذي قام بشرائه وفي كلتا الحالتين هما بيانات نصية وبالتالي لابد من تخزينهما كسلاسل حرفية أما السطر الثالث فقمنا فيه بتعريف متغيرين من النوع int الذي يمثل الأعداد الصحيحة والسبب في ذلك أننا نريد أن نخزن فيهما القيمتان اللتان تمثلان عدد المنتجات التي اشتراها الشخص والسعر الإجمالي للمنتجات الذي تم حسابه في الواجهة السابقة وإرساله إلى هذه الواجهة ولأن هذه القيم هي قيم عددية لذلك اخترنا النوع int كونه الأنسب للتخزين.

ننتقل الآن إلى السطر الثالث والذي يضم تعليمة if الشرطية والتي يمكن قراءتها كما يلي:
"إذا لم يكن المتغير extras يملك قيمة" أي أن الكلمة null تعني أن هذا المتغير لا يملك قيمة فهي تدل على القيمة الفارغة (عدم إسناد أي قيمة وليس الصفر فهناك فرق بينهما) وما سيتم تنفيذه في حال تحقق الشرط أي في حال وجود قيمة للمتغير extras هو كما يلي:
أولاً أحضر القيمة من المتغير الاسمي Name وهو مطابق تماماً للاسم الذي قمنا باختياره في الواجهة السابقة عندما قمنا بعملية الإرسال وإن لم نستخدم نفس الاسم فإننا لن نحصل على القيمة التي نريدها ويجب الانتباه إلى الدقة في كتابة الاسم أي مراعاة حساسيته لحالة الأحرف فهناك فرق بين الحروف الكبيرة والصغيرة لذلك لابد من الانتباه إلى أن تتطابق طريقة كتابته بين الواجهتين واستخدمنا لغرض إحضار القيمة الطريقة getString() والتي تقوم بإحضار القيم كسلسلة حرفية ولكن أي قيمة نقصد؟! القيمة المخزنة في المتغير extras الذي قمنا بتخزين جميع القيم المنقولة ضمنه وبعد الإحضار يتم إسناد هذه القيمة (أي تخزينها) إلى المتحول الذي أسميناه val1.

وكررنا الأمر نفسه مع المتحول val2 الذي سيخزن فعلياً اسم المنتج بينما قام المتحول val1 بتخزين قيمة اسم الشخص. أما بالنسبة للقيمتين val3 و val4 فقد استخدمنا معهما الطريقة getInt() بدلاً من الطريقة getString() فلماذا قمنا بذلك؟! السبب ببساطة هو أن نوع هاتين القيمتين هو قيم عددين وبالتالي لا يمكنننا إحضارهما كسلاسل حرفية وبالتالي استخدمنا الطريقة getInt() التي تقوم بإحضار القيم العددية الصحيحة وهاتين القيمتين هما عدد المنتجات ( الذي أسميناه Count) والسعر الإجمالي (والذي أسميناه Total).

إذاً بتنفيذ الكود السابق نكون قد استطعنا إحضار القيم من الواجهة الأولى إلى الواجهة الثانية عبر الجسر الذي أنشأناه بينهما ولكن لماذا وضعنا شرط أنه لا بجب أن تكون قيمة المتغير extras هي null؟! ألم يكن بإمكاننا الاستغناء عن هذا الشرط ونحن نعرف مسبقاً أنه يوجد له قيمة؟! بالطبع كنا نستطيع الاستغناء ولكن لكي تتعلم البرمجة بالشكل السليم عليك مراعاة جميع الاحتمالات الممكنة الورود خلال التطبيق حتى ولو كان احتمال الحدوث ضئيل جداً وبالتالي لن نخسر شيئاً بوضع هذا الشرط بل على العكس نكون قد ضمنا عدم حدوث أي مشاكل أو أخطاء محتملة الحدوث.
برأيكم ما الذي تبقى أمامنا للقيام به لكي يعمل التطبيق بالشكل السليم؟! سنترك الإجابة لكم إلى أن نلقاكم في الدرس القادم.


ليست هناك تعليقات:

إرسال تعليق