حلقات do-while في لغة C++: دليل شامل مع أمثلة عملية وبناء الجملة
مقدمة إلى الحلقات التكرارية do-while في C++
تُعد الحلقات التكرارية (Loops) من هياكل التحكم الأساسية في البرمجة، والتي تتيح تنفيذ كتلة معينة من التعليمات البرمجية بشكل متكرر بناءً على شرط محدد. من بين هذه الحلقات، تبرز حلقة do-while كنوع مميز يمتلك خصائص فريدة تجعلها ضرورية في سيناريوهات برمجية معينة.
تُعد حلقة do-while نوعًا مميزًا من الحلقات التكرارية while، حيث تضمن تنفيذ كتلة التعليمات البرمجية مرة واحدة على الأقل قبل التحقق من الشرط. بعد ذلك، تستمر الحلقة في التكرار طالما أن الشرط صحيحًا. هذه الخاصية الجوهرية تميزها عن الحلقات الأخرى وتوفر مرونة إضافية للمطورين.
بناء الجملة الأساسي لحلقة do-while
لفهم كيفية عمل حلقة do-while، من الضروري التعرف على بنائها الأساسي:
do {
// جسم الحلقة (التعليمات البرمجية التي سيتم تنفيذها)
} while (condition);
من الجدير بالذكر أن اختبار شرط الإنهاء (condition) يتم بعد كل عملية تنفيذ لجسم الحلقة. هذا يعني أن حلقة do-while ستُنفذ دائمًا مرة واحدة على الأقل، حتى لو كان الشرط خاطئًا منذ البداية. وهذا يختلف جوهريًا عن حلقة while العادية، حيث يتم اختبار الشرط قبل بدء الحلقة، وبالتالي لا يُضمن تنفيذ كتلة التعليمات البرمجية على الإطلاق إذا كان الشرط خاطئًا من البداية.
وفيما يلي بناء جملة حلقة while التقليدية للمقارنة:
while (condition) {
// جسم الحلقة (التعليمات البرمجية التي سيتم تنفيذها)
}
أمثلة عملية على حلقات do-while في C++
المثال الأول: طباعة الأرقام من 1 إلى 4
لنلقِ نظرة على مثال عملي يوضح كيفية عمل حلقة do-while في طباعة تسلسل من الأرقام:
#include <iostream>
int main () {
int number = 1;
do {
std::cout << number << std::endl;
number++;
} while (number < 5);
return 0;
}
الناتج المتوقع:
1
2
3
4
في هذا المثال، قمنا بتهيئة متغير صحيح باسم number بالقيمة 1. ثم نقوم بتنفيذ الحلقة بشكل متكرر. داخل الحلقة، نطبع قيمة المتغير ثم نزيدها بمقدار واحد. تستمر الحلقة في التنفيذ طالما أن قيمة number أقل من 5. ونتيجة لذلك، يتم طباعة الأرقام من 1 إلى 4.
المثال الثاني: إظهار التنفيذ لمرة واحدة حتى مع الشرط الخاطئ
إليك مثال آخر يوضح سلوك حلقة do-while عندما يكون الشرط خاطئًا من البداية، مع إظهار الناتج:
10
#include <iostream>
int main () {
int number = 10;
do {
std::cout << number << std::endl;
number++;
} while (number < 5);
return 0;
}
في هذا المثال، استخدمنا نفس الكود من المثال الأول، ولكن قمنا بتهيئة المتغير number بالقيمة 10. نظرًا لأن 10 ليست أقل من 5، فإن الشرط يصبح خاطئًا منذ البداية. ومع ذلك، سيتم تنفيذ الحلقة مرة واحدة على الأقل، وستكون القيمة 10 هي الناتج الوحيد الذي سيُطبع، مما يؤكد خاصية التنفيذ لمرة واحدة على الأقل لحلقة do-while.
متى تستخدم حلقة do-while؟
تُعد حلقة do-while أداة برمجية ممتازة عندما تحتاج إلى تنفيذ كتلة من التعليمات البرمجية بشكل متكرر. كما ذكرنا سابقًا، يجب عليك استخدام هذا البناء عندما يتطلب منطق برنامجك تنفيذ الحلقة مرة واحدة على الأقل، بغض النظر عن صحة الشرط الأولي.
تخيل سيناريو برمجي مشابه للمثال الثاني، ولكن بدلًا من تهيئة المتغير بقيمة ثابتة، نستخدم مدخلات من المستخدم. في هذه الحالة، لا يمكننا ضمان أن تكون قيمة المدخلات صغيرة بما يكفي لتلبية الشرط، ولكننا ما زلنا نرغب في رؤية بيان طباعة واحد على الأقل في نافذة الإخراج (output console). هذا هو الاستخدام الأمثل لحلقة do-while، حيث يمكنها معالجة المدخلات الأولية أو ضمان تنفيذ عملية معينة قبل تقييم الحاجة إلى تكرارات إضافية.
// كود شبه برمجي يوضح فائدة do-while:
int number = getUserInput();
do {
std::cout << number << std::endl;
number = someUpdateCalculation();
} while (number < 5);
الخلاصة التقنية
تُبرز حلقة do-while أهميتها في سيناريوهات البرمجة التي تتطلب تنفيذًا أوليًا لكتلة من التعليمات البرمجية قبل التحقق من أي شروط. هذا يمنح المطورين مرونة في التعامل مع حالات مثل معالجة المدخلات الأولية أو التأكد من تنفيذ عملية معينة مرة واحدة على الأقل. فهم الفروقات الدقيقة بينها وبين حلقة while التقليدية أمر بالغ الأهمية لكتابة كود فعال ومنطقي في C++، مما يضمن اختيار الأداة المناسبة لكل تحدٍ برمجي.