التحكم في التدفق (Flow Control) في C++
يُعد التحكم في التدفق أحد الأساسيات الضرورية لأي مبرمج يتعامل مع لغات البرمجة الحديثة، وهو عنصر أساسي في كتابة أي برنامج حاسوبي. وفي لغة C++، يعتبر التحكم في التدفق من المهارات الضرورية التي يجب أن يتقنها المطورون لكتابة برامج فعالة ومتطورة.
التحكم في التدفق يعني ببساطة القدرة على تحديد طريقة تنفيذ الأوامر داخل البرنامج بناءً على شروط معينة أو تكرار تنفيذ مجموعة من الأوامر بشكل متكرر حسب الحاجة. في C++، يتم ذلك من خلال استخدام جمل التحكم المختلفة مثل جمل الشروط (مثل if, else, switch) وجمل التكرار (مثل for, while, do-while)، بالإضافة إلى جمل الانقطاع (مثل break, continue, return).
في هذا المقال، سنتناول كل نوع من أنواع التحكم في التدفق في C++ بشكل مفصل مع أمثلة توضح كيفية استخدامها.
1. جمل الشروط (Conditional Statements)
جملة if
تعتبر جملة if من أشهر جمل التحكم في تدفق البرامج، وتستخدم لتحديد ما إذا كان يجب تنفيذ جزء من الكود بناءً على شرط معين. يُنفذ الكود الذي يلي جملة if فقط إذا كان الشرط المُحدد صحيحًا (أي يعود بقيمة true).
مثال:
cpp#include
using namespace std;
int main() {
int age = 20;
if (age >= 18) {
cout << "You are an adult." << endl;
}
return 0;
}
في المثال السابق، إذا كان عمر الشخص 18 عامًا أو أكثر، سيتم طباعة الرسالة “You are an adult.”
جملة else
تُستخدم جملة else مع جملة if لتحديد ما يجب فعله إذا كانت قيمة الشرط غير صحيحة (أي إذا كان الشرط يعود بقيمة false).
مثال:
cpp#include
using namespace std;
int main() {
int age = 16;
if (age >= 18) {
cout << "You are an adult." << endl;
} else {
cout << "You are a minor." << endl;
}
return 0;
}
في هذا المثال، إذا كان عمر الشخص أقل من 18، ستتم طباعة الرسالة “You are a minor.”
جملة else if
إذا كان لدينا عدة شروط نريد فحصها، يمكن استخدام جملة else if بين if و else. هذا يسمح بوجود عدة شروط مختلفة يمكن أن تؤدي إلى تنفيذ أوامر مختلفة.
مثال:
cpp#include
using namespace std;
int main() {
int score = 85;
if (score >= 90) {
cout << "Grade: A" << endl;
} else if (score >= 80) {
cout << "Grade: B" << endl;
} else {
cout << "Grade: C" << endl;
}
return 0;
}
في هذا المثال، إذا كان الدرجة بين 80 و 89، سيتم طباعة “Grade: B”.
جملة switch
تُستخدم جملة switch لتحديد إجراء واحد من عدة إجراءات بناءً على قيمة متغير معين. يُفضل استخدام switch عندما تكون هناك العديد من الشروط الممكنة التي تتعلق بنفس المتغير.
مثال:
cpp#include
using namespace std;
int main() {
int day = 3;
switch (day) {
case 1:
cout << "Monday" << endl;
break;
case 2:
cout << "Tuesday" << endl;
break;
case 3:
cout << "Wednesday" << endl;
break;
case 4:
cout << "Thursday" << endl;
break;
case 5:
cout << "Friday" << endl;
break;
default:
cout << "Weekend" << endl;
}
return 0;
}
في هذا المثال، إذا كانت قيمة المتغير day هي 3، سيتم طباعة “Wednesday”.
2. جمل التكرار (Looping Statements)
جملة for
تُستخدم جملة for للتكرار عبر مجموعة من القيم أو لتنفيذ جزء من الكود عددًا معينًا من المرات. تعد جملة for مثالية عندما نعرف مسبقًا عدد التكرارات المطلوبة.
مثال:
cpp#include
using namespace std;
int main() {
for (int i = 0; i < 5; i++) {
cout << "Iteration " << i << endl;
}
return 0;
}
في هذا المثال، ستتم طباعة “Iteration 0” حتى “Iteration 4”.
جملة while
تُستخدم جملة while للتكرار طالما كان الشرط صحيحًا. إذا كان الشرط غير صحيح في بداية التكرار، فإن الكود داخل جملة while لن يتم تنفيذه حتى مرة واحدة.
مثال:
cpp#include
using namespace std;
int main() {
int count = 0;
while (count < 5) {
cout << "Count: " << count << endl;
count++;
}
return 0;
}
في هذا المثال، سيتم طباعة “Count: 0” حتى “Count: 4″، حيث إن الشرط count < 5 هو الذي يحدد استمرار التكرار.
جملة do-while
تشبه جملة do-while جملة while، إلا أن الكود داخل جملة do-while يُنفذ مرة واحدة على الأقل، بغض النظر عن حالة الشرط.
مثال:
cpp#include
using namespace std;
int main() {
int count = 0;
do {
cout << "Count: " << count << endl;
count++;
} while (count < 5);
return 0;
}
في هذا المثال، سيتم أيضًا طباعة "Count: 0" حتى "Count: 4".
3. جمل الانقطاع (Jump Statements)
جملة break
تُستخدم جملة break للخروج من حلقة التكرار أو من جملة switch بشكل مفاجئ.
مثال:
cpp#include
using namespace std;
int main() {
for (int i = 0; i < 10; i++) {
if (i == 5) {
break;
}
cout << "i = " << i << endl;
}
return 0;
}
في هذا المثال، عند وصول i إلى 5، ستتوقف الحلقة بشكل مفاجئ ولن تستمر في التكرار.
جملة continue
تُستخدم جملة continue لتخطي التكرار الحالي في الحلقة والانتقال إلى التكرار التالي، دون تنفيذ الأوامر التي تليها في الحلقة.
مثال:
cpp#include
using namespace std;
int main() {
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue;
}
cout << "i = " << i << endl;
}
return 0;
}
في هذا المثال، عند وصول i إلى 2، سيتم تخطي طباعة "i = 2" ومتابعة الحلقة مع i = 3.
جملة return
تُستخدم جملة return لإيقاف تنفيذ الدالة وإرجاع قيمة إلى الجهة التي استدعت الدالة.
مثال:
cpp#include
using namespace std;
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(5, 3);
cout << "Sum: " << result << endl;
return 0;
}
في هذا المثال، عند استدعاء الدالة add، يتم إرجاع نتيجة الجمع بواسطة جملة return.
الخلاصة
التحكم في التدفق هو حجر الزاوية الذي يقوم عليه بناء أي برنامج معقد. بفضل جمل الشروط مثل if و switch، وجمل التكرار مثل for, while, و do-while، وجمل الانقطاع مثل break, continue, و return، يمكن للمبرمج أن يبني منطقًا معقدًا وقادرًا على التفاعل مع الظروف المختلفة داخل البرنامج.
فهم كيفية عمل هذه الجمل بشكل جيد سيمكن المطور من كتابة برامج مرنة، قابلة للتوسع، ومؤهلة للتعامل مع مجموعة واسعة من السيناريوهات.

