حلقة لامتناهية
التكرار الحلقي الامتناهي أو التكرار الحلقي غير المنتهي (بالإنجليزية: infinite loop) هي سلسلة تعليمات في برنامج حاسوبي غير منتهية، إما بسبب أن الحلقة لا تحوي على حالة إنهاء أو تحوي على حالة إنهاء لا يمكن أن تتحقق، أو أن الحالة تجعلها بأن تبدء من جديد في كل مرة. في أنظمة التشغيل القديمة التي تعمل على نموذج تعدد المهام التعاوني عادةً ما تسبب الحلقات الامتناهية لهذه الأنظمة بعدم الاستجابة، ولكن بنموذج تعدد المهام الوقائي عادة تسبب الحلقات الامتناهية للبرنامج بأن يستهلك كافة وقت المعالج المتاح، ولكن يمكن للمستخدم إنهاءه. تسمى حلقات انتظار الانشغال في بعض الأحيان بالحلقات الامتناهية. وتعتبر الحلقات الامتناهية أحد مسببات التعليق في الحاسوب.
الحلقات المتعمدة وغير المتعمدة
التكرار الحلقي هو مجموعة من التعليمات تنفذ حتى تتم حالة معينة. وتحدث الحلقة الامنتهية عندما لا تتحقق هذه الحالة، بسبب الخواص الذاتية لهذه الحلقة
التكرار المتعمد
هناك بعض الحالات التي تتطلب التكرار. على سبيل المثال، عادة لا تتواجد حالة خروج في الحلقة الرئيسة لألعاب الخراطيش، بما أنه لا يوجد نظام تشغيل للبرنامج للخروج، فستعمل الحلقة حتى يتم إطفاء وحدة التحكم.
تتطلب الحواسيب التفاعلية الحديثة مراقبة مدخلات المستخدم باستمرار أو لمراقبة نشاط الجهاز، لذا على المستوى الأساسي هنالك معالجة لامنتهية حلقة خاملة، حيث يجب أن تستمر حتى يتم إطفاء الجهاز أو إعادة تشغيله.
التكرار الغير متعمد
يستخدم هذا المصطلح في أغلب الأحيان للإشارة إلى تلك الحالات التي تكون النتيجة فيها غير مرجوة، وهذا يعني بوجود خطأ برمجي، هذه الأخطاء شائعة أكثر عند المبرمجين المبتدئيين، ولكن يمكن أن تنشأ عند المبرمجين ذو الخبرة أيضاً.
أحد الأخطاء الأبرز شيوعاً، على سبيل المثال، المبرمج يريد أن يكرر على مجموعة من العناصر كالقائمة المتصلة، حيث تنفذ الحلقة مرة لكل عنصر، الروابط المتشكلة بشكل غير ملائم تستطيع إنشاء حلقة مرجعية في القائمة، حيث يربط عنصر واحد بذلك الذي حدث في بداية القائمة، هذا يؤدي لربط جزء من القائمة إلى دائرة، مما يتسبب للبرنامج بالتكرار للأبد.
بينما يمكن الكشف عن معظم حلقات التكرار الامتناهي من النص البرمجي، إلا أنه لا توجد طريقة عامة لتحديد أن أي برنامج سيتوقف أو سيعمل للأبد؛ هذه هي اللايقينية في مسألة التوقف
أمثلة على حلقات التكرار اللانهائية المتعمدة
مثال بسيط بلغة السي
int main() { for (;;) // or equivalently, while (1) { printf(«حلقة غير منتهية\n»); } return 0; }
الصيغة التقليدية في الحلقة الغير منتهية for (;;)
تظهر في مرجع لغة البرمجة سي وغالباً ما يطلق عليها تسمية «إلى الأبد»[1]، وستطبع عبارة حلقة غير منتهية من دون توقف.
مثال آخر في الدوس:
:A goto :A
مثال في الجافا
while (true) System.out.println("Infinite Loop");
مثال في البايثون
while True: print("Infinite Loop")
مثال في الروبي
loop { puts "Infinite Loop" }
مثال في الباش
$ while true; do echo "Infinite Loop"; done
مثال في بيرل
print "Infinite Loop\n" while 1
مثال في جافاسكربت
while (true) { console.log("Infinite Loop"); }
مراجع
- "Endless loop in C/C++"، stackoverflow.com، مؤرشف من الأصل في 2 أبريل 2019، اطلع عليه بتاريخ 31 مايو 2017.
- بوابة رياضيات
- بوابة برمجة الحاسوب