الحلقات التكرارية في الجافا: مقارنة While مع For

هل أتيتَ من كوكب آخر لتدعي قدرتك على التخلص من الحلقات التكرارية في شفرات الجافا؟ إنها لاعبٌ يلعب دوراً محورياً في زيادة إنتاجية المبرمج و رفع جودة الشفرة التي يكتبها بل و حتى بإمكانك إعتبارها أداة مسهلة لنقل أفكارك المنطقية إلى شفرة برمجية كما تحب أنت و يرضي العميل.

تحدثت عن جمل التحكم سابقاً في تدونتي جمل التحكم|هيكل التحكم Control Statements|Control Structure تحول الأفكار إلى شفرات مصدرية ولكن هنا نتخصص.

في هذه التدوينة افترض أنك تعلم مسبقاً ما هي الحلقات التكرارية و كيف تعمل. و لكن إذا لم تكن قد مررت على مفهوم الحلقات التكرارية فها هي نبذة صغيرة عن الحلقات التكرارية ربما تكفيك لتتابع القراءة، و لكنها لن تكفيك لتتعلمها.

الحلقات التكرارية هي عبارات برمجية تستخدم من أجل تنفيذ أجزاء محددة من الشفرة البرمجية عدة مرات. فبدلاً من تكرار كتابة الشفرة 1000 مرة مثلاً فستكتبها مرة واحدة و تؤدي لك الحلقات التكرارية بقية المهمة من أجلك بعد أن تحدد لها بعض المُتغيرات مثل عدد التكرارات أو متى تبدأ و متى تتوقف.

القنّاص لا يضغط على الزناد دائماً ولا يضيع فرصة

الحلقات التكرارية for while

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

المكانة المهمة للحلقات التكرارية تكونت من أسباب بسيطة و لكنها جوهرية في مقياس البرمجة و كتابة الشفرات. تأمل الأسباب التالية التي تقودك إلى استخدام الحلقات التكراريةو حاول أن تتفكر..

كيف ستكون حياتك البرمجية و كتابةُ شفراتك من دون هذه الحلقات التكرارية. بعد أن تدغدغ فوائدُها مشاعرك اعتبرها بطلك القادم

هيا لننطلق، متى تضغط على زناد إستخدام حلقاتك؟

  • تكرار الشفرة: لم تُوجد البرمجة ولا تطورت إلا لتسهيل العمل على أصحاب الأعمال و على المبرمجين أنفسهم. لذا فإن إعادة كتابة نفس السطر لعشرات أو آلاف المرات غير مجدي و مضيعةٌ للوقت. خاصة مع مفاهيم البرمجة كائنية المنحى فإن إعادة كتابة الشفرات البرمجية لمُحترفي البرمجة تُعد ضرباً من الخيال! حالما تجد تكراراً في شفرتك البرمجية حاول التخلص منه بإستخدام الحلقات التكرارية.
  • تكرار المنطق: إن كُنت قد جربت العمل لدى المؤسسات أو تنفيذ برمجيات تخص هذه المؤسسات فلا بد أنك تتفق معي على أن الأعمال تحتوي على منطق مُكرر بكثرة، هذا المنطق بالإمكان إختزاله بإستخدام الحلقات التكرارية. تشابه هذه الحالة سابقتها في أن الشفرة تتكرر و لكنها تختلف بأن الشفرة تستقبل مدخلات تجعل مخرجاتها مختلفة. العملية نفسها و المخرجات مختلفة. نسبة لإختلاف المدخلات و المخرجات فاستخدام الحلقات التكرارية في هذه الحالة يحتاج غلى تركيز و تفكير مما يفوت على بعض المبرمجين المبتدئين فكرة إستخدام الحلقات التكرارية.
  • العمليات الغير معلومة المدة: كما تعلم فإن الحلقات التكرارية تعمل على إعادة و تكرار عمليات محددة حتى أمد معين، ماذا لو طلبت من إحدى الحلقات التكرارية إجراء عملية تستغرق ثانية لبلايين المرات؟ ألا يقاربُ ذلك التنفيذ إلى ما لا نهاية بمقياس أعمار البشر 🙂 ، على كل لن تحتاج إلى ذلك فللحلقات التكرارية هياكل و خصائص تجعلها تعمل فعلياً إلى ما لا نهاية طالما أن الموارد التي تحتاجها متاحة.
  • إختصار الشفرات: عندما تجد أن هناك جزءاً محدداً من الشفرة يتكرر بصورة متوالية و له علاقة ببعضه عندها تستطيع إستخدام الحلقات التكرارية لتوليد تلك الشفرة. مثال هذه الحالة هي إسناد الأرقام للمصفوفة.

أهمية الحلقات التكرارية تتجلى بقوة في ثماني كلمات


“عدد مبرمجي الجافا الذين لا يستخدمون الحلقات التكرارية = صفر”

هل for ام while

تلاحم تام أم إختلاف أضداد بين For و While؟

while و for لهما خصائص مختلفة قليلاً، هذه الخصائص تجعل لكُل منهما مميزات تؤهلهما للإستخدام الأمثل في أوقات محددة، و لكن لنتعرف على المميزات الخاصة بكل منهما قبل أن نتحدث عن إستخدامهما.

تستطيع for أن تحل محل while كما أن العكس صحيح. هذا الإحلال و الإستحلال المتبادل جعل لكُل نوع منهما مستخدمين، بل مشجعين و متعصبين!، نعم .. لم تحز كرة القدم وحدها على هذا النوع من الإنتماء.

كل حلقة تكرارية تستطيع تأدية المهام المنوطة بها، و لكن السؤال المهم، هل يوجد إختلاف في الأداء (سرعة التنفيذ)؟ هل يوجد إختلاف في سرعة كتابة الشفرة؟ هل يوجد إختلاف في سهولة قراءة الشفرة عند مراجعتها؟ هذه هي النقاط التي نحتاج أن نتعرف عليها.

إستخدام for أو while تبادلياً ليس مؤثراً على معيار سرعة التنفيذ طالما أن البرامج المُستخدمة ليست برامج علمية تحتاج إلى أجزاءٍ من الثانية و دقة عالية، و لكن للدقة، فإنه بلا أدنى شك فإن الإختلاف موجود بينهما و إن كان بفروقات صغيرة و لكني لا أعتبره إختلافاً لسبب بسيط جداً..

إذا كانت درجة الإختلاف هذه مؤثرة على برنامجك فإختيارك للغة الجافا لبرمجتك إختيار خاطئ.

بمعيار السرعة، ضعهما على نفس المرتبة.

سرعةُ كتابة الشفرة و سهولة قراءتها أمران مرتبطان، كيف ذلك؟ هنالك حالات يكون فيها إستخدام for هو الإختيار الأمثل، فإذا ما حاولت إستخدام while في تلك الحالات فإن سرعة كتابتك للشفرة ستقل، كما أن قراءة الشفرة لن تكون أسهل، و العكس صحيح عند إستخدام while مكان for أيضاً، هذا الأمر يتضح أكثر بإطلاعك على الجزء القادم من التدوينة.

إذا أردت أن تحيّره فخيّره، لا تحتار في الإختيار بين While و For

اختيار الحلقات التكرارية

لن أسمح لك أن تحتار، لديك أداتان و لكل منهما مكان مناسب، سأنقل لك أماكن يفضل فيها إختيار while و أخرى إستخدام for، و لنبدأ بـ for، أنصحك بإستخدامها عند

  1. وجود تسلسل زيادةً أو نقصاناً: هيكلة الحلقة for مجهزة من أجل ذلك، ضع عدد التكرارات و ستعمل على زيادتها في كل دورة، لماذا تكلف نفسك جهداً إضافياً بكتابة سطر على الأقل لإجراء عملية الزيادة و التأكد من شرط التوقف؟ عدد أسطر أقل و جودة أعلى.
  2. عدد التكرارات معلوم: هيكلة حلقة for مجهزة لإستقبال عدد التكرارات، أي عدد المرات التي ستنفذ فيها هذه الشفرة. استخدام for  في هذه الحالة يسهل قراءة الشفرة و صيانتها، بل و يسهل كتابة الشفرة أيضاً.

أما while فاستخدمها في حالة

  1. عدم معرفة التكرارات المطلوبة و لكن منطق العملية تكراري.
  2. التكرار إلى الأبد: و غالباً ما يوجد شرط لإنهاء هذا التكرار الأبدي، مثل إجراء التكرار حتى يدخل المستخدم رقم معين، أو حتى يصل البرنامج لحساب قيمة معينة.
  3. عندما يكون شرط التوقف متعلقاً بقيمة متغير منطقي (Boolean): إستخدام while في هذه الحالة يجعل الشفرة واضحة و سهلة القراءة و المتابعة و الصيانة، و يوضح المنطق أيضاً.

وفي حال واجهتك مشاكل يمكنك الاطلاع علي 11 مشكلة متكررة في شفرة جافا تواجه المبتدئين وكيف تتغلب عليها

وتدوينة ما هو الخطأ “java.lang.nullpointerexception” و كيف يتم إصلاحه!!

ثُم ماذا بعد هذا؟ هذا رأيي بين أداتين من أهم الأدوات البرمجية فيما يتعلق بالحلقات التكرارية، ما هو رأيك أنت؟


قد يعجبك أيضا

ما رأيك؟ اترك تعليقاً أدناه


{"email":"البريد الالكتروني غير صحيح","url":"رابط الموقع غير صحيح","required":"بعض الحقول المطلوبة لم تتم تعبئتها"}

نجاح!

تنبيه!

خطأ!