تُستخدم الحلقات لتنفيذ بعض المنطق بشكل متكرر.
النوعان الأكثر شيوعًا هما while loop (التكرار غير المحدد) وfor loop (التكرار المحدد أو المعدود).
وهناك أيضًا for each حلقة، التي ستظهر في مفهوم لاحق.
تتكوّن for loop من ترويسة ومن كتلة كود تحتوي على جسم الحلقة محاطًا بالأقواس المعقوفة.
تتكوّن الترويسة من 3 مكوّنات تفصل بينها الفواصل المنقوطة ;: عبارة التهيئة، والشرط، وتعبير آخر.
ويمكن أن يكون كلٌّ من هذه المكوّنات فارغًا.
for (init-statement; condition; expression) {
some_statement;
}
تُنفِّذ while loop جسمها ما دام فحص شرطها صحيحًا.
يوضّح مقطع الكود التالي كيفية تحويل حلقة for إلى حلقة while.
init-statement;
while(condition) {
some_statement;
expression;
}
عند العمل مع الحلقات، يُطلب غالبًا إضافة 1 إلى متغير العدّاد أو طرح 1 منه.
هذا أمر شائع جدًا لدرجة أن للعملية عاملين خاصين: ++ و--.
وهما يأتيان بصيغتين: صيغة بادئة وصيغة لاحقة. الصيغة البادئة تغيّر المتغير قبل استخدامه في العبارة، والصيغة اللاحقة تغيّره بعد ذلك. وعلى الأرجح ستحتاج إلى الصيغة البادئة في معظم الأوقات.
int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3
عادةً ما يُهيّئ مكوّن التهيئة متغير عدّاد، ويتحقّق الشرط مما إذا كان ينبغي متابعة الحلقة أو إيقافها، فيما يزيد المكوّن اللاحق العدّاد عادةً في نهاية كل تكرار.
int sum{0};
for (int i{1}; i < 10; ++i) {
sum += i;
}
ستجمع هذه الحلقة الأعداد من 1 إلى 9 (بما في ذلك 9).
داخل جسم الحلقة، يمكنك استخدام الكلمة المفتاحية break لإيقاف تنفيذ الحلقة بالكامل:
int sum{2};
while(true) {
sum *= 2;
if (sum > 1000)
break;
}
// sum is now 1024
في المقابل، تُوقف الكلمة المفتاحية continue تنفيذ التكرار الحالي فقط وتُتابع مع التكرار التالي:
int equal_sum{0};
for (int i{1}; i < 7; ++i) {
if (n%2 == 1) {
continue;
}
equal_sum += i;
}
// equal_sum is now 12
ملاحظة: عادةً ما يكون فهم منطق الحلقة أسهل عندما يكون استخدام
breakوcontinueفي أدنى حدّ أو مُتجنَّبًا تمامًا.