أساسيات التحكم في تدفق التنفيذ في بايثون
تُعد الحلقات التكرارية (loops) حجر الأساس في البرمجة. فهي تتيح لك تنفيذ كود متكرر حتى الوصول إلى شرط معين. لكن أثناء العمل، غالبًا ما تحتاج إلى إنهاء الحلقة مبكرًا، أو تخطي تكرار معين، أو ترك كتلة برمجية فارغة لاستخدامها لاحقًا.
توفر لغة بايثون ثلاثة أوامر خاصة للتحكم في تدفق التنفيذ. كل منها يحل مشاكل محددة عند التعامل مع الحلقات والجمل الشرطية.
سلوك الحلقات بدون أوامر تحكم
قبل دراسة أوامر التحكم، من المهم فهم السلوك الافتراضي للحلقات. افتراضيًا، تنفذ الحلقة جميع التكرارات من البداية إلى النهاية:
for i in range(5):
print(i)
النتيجة:
0
1
2
3
4
الحلقة for العادية تعالج جميع عناصر التسلسل. لتغيير هذا السلوك، نستخدم الأوامر الخاصة.
أمر break: إنهاء تنفيذ الحلقة
كيفية عمل break
يقوم أمر break بإنهاء تنفيذ أقرب حلقة تكرارية (for أو while) فورًا بمجرد تنفيذه.
for i in range(10):
if i == 5:
break
print(i)
النتيجة:
0
1
2
3
4
بمجرد أن تصل قيمة i إلى 5، يتم إنهاء الحلقة بالكامل. لا يتم تنفيذ التكرارات المتبقية.
الاستخدامات العملية لـ break
يُستخدم أمر break على نطاق واسع في السيناريوهات التالية:
- الإنهاء المبكر عند تحقيق شرط معين
- الخروج من الحلقات التي قد تكون لا نهائية
- البحث عن أول عنصر مطابق في تسلسل
- معالجة الأخطاء الحرجة داخل الحلقات
البحث عن أول قاسم لعدد
n = 17
for i in range(2, n):
if n % i == 0:
print(f"أول قاسم هو: {i}")
break
else:
print("عدد أولي")
خاصية مهمة: إذا انتهت الحلقة بشكل طبيعي دون تنفيذ break، يتم تنفيذ كتلة else. هذا يسمح بالتمييز بين طريقتين لإنهاء الحلقة.
أمر continue: الانتقال إلى التكرار التالي
آلية عمل continue
يقوم أمر continue بتخطي الكود المتبقي في التكرار الحالي والانتقال مباشرة إلى الخطوة التالية من الحلقة. تستمر الحلقة في التنفيذ، ولكن يتم معالجة قيم معينة بطريقة خاصة.
for i in range(5):
if i == 2:
continue
print(i)
النتيجة:
0
1
3
4
تم تخطي القيمة 2 بالكامل، لأنه عند i == 2 يتم تنفيذ أمر continue.
مجالات استخدام continue
يُستخدم continue غالبًا من أجل:
- تصفية القيم غير المرغوب فيها
- تخطي الأسطر أثناء معالجة الملفات
- تنفيذ شروط التحقق من صحة البيانات
- إنشاء مرشحات في أدوات التحليل والمعالجة
تصفية الأعداد الزوجية
for i in range(10):
if i % 2 == 0:
continue
print(i)
النتيجة:
1
3
5
7
9
يتم تخطي جميع الأعداد الزوجية، ويتم طباعة الأعداد الفردية فقط.
أمر pass: عملية فارغة
الغرض من أمر pass
يمثل أمر pass عملية فارغة. لا يقوم بأي إجراء، ولكنه ضروري من الناحية التركيبية (syntactically) في الأماكن التي تتوقع فيها بايثون وجود تعليمات برمجية.
for i in range(5):
if i == 3:
pass
print(i)
النتيجة:
0
1
2
3
4
يتم تنفيذ أمر pass عندما i == 3، لكنه لا يؤثر على سير تنفيذ البرنامج.
الاستخدام العملي لـ pass
يُستخدم pass بشكل أساسي كعنصر نائب (placeholder) أثناء تطوير الكود، مثل:
- عند تعريف دالة أو كلاس ستقوم بتنفيذه لاحقًا
- في الجمل الشرطية التي لم تقرر بعد ما ستفعله
- في الحلقات التي تريد تركها فارغة مؤقتًا
def future_function():
pass # سيتم تنفيذ هذه الدالة لاحقًا
class MyClass:
pass # سيتم إضافة خصائص للكلاس لاحقًا