اهلا بكم في درس جديد في دورة تعلم لغة GDscript الخاصة بمحرك غودو, هذا الدرس هو تكملة لأدوات التحكم control statements التي تكلمنا عنها سابقا, هذه المرة سنتكلم عن مفهوم مختلف وهو الحلقات التكرارية loops
من أنواعها for, while وهي تكرر أسطر من الاكواد بعدد محدد
عناصر المقال
for
for Variable in Steps:
doSomething()
for i in 5 :
print("hello") # it will be print "hello" 5 times
تكتب for يليها متغير ثم in ثم عدد مرات التكرار
في المثال الثاني, هكذا سيتم تكرار أمر الطباعة 5 مرات .. يمكنك تكرار أي اسطر من الاكواد, الأمر يعتمد على ماذا ستكرر , فمثلًا ان اردت ان تستدعى 10 اعداء في مكان ما .. هل ستكتب كود الاستدعاء 10 مرات ؟ مع انه نفس الكود تمامًا, هنا يأتي فائدة الـ loop انك تكتب الكود مرة واحدة ثم تكرره كما تشاء
أيضًا ينطبق عليها الـ المسافات الفارغة
for i in 5:
print(i) # i will be 0 - 1 - 2 - 3 - 4
for i in range(5):
print(i) # i will be from 0 - 1 - 2 - 3 - 4
عليك ان تدرك ان قيمة المتغير i الذي وضعناه هو في الحقيقة عداد يعد عدد اللفات .. فلو افترضنا ان الـ for ستتكرر n مرة فقيمة المتغير i تبدأ من 0 لـ n-1 ــ اي في حالتنا سيصل الى 4 وليس 5 ــ
كما لدينا دالة مهمة تستخدم وهي الـ range تستطيع من خلالها تحديد مجال قيم الـ i, وان استخدمتها ووضعت لها قيمة عددية واحدة فسيفعل نفس الأمر انه سيلف بعدد مرات الـ n مثل الكود الذي في الاعلى
for i in range(3, 8):
print(i) # i will be 3 - 4 - 5 - 6 - 7, that means it’s 5 loops
الفكرة في دالة range, انك يمكنك ان تحدد مجال لقيمة i يبدأ من اين و ينتهي اين
مثل الكود الذي بالاعلى فقيمة i ستكون من 3 الى 7 وسيلف ويتكرر الكود 5 مرات فقط
تستطيع ارسال متغير ثالث يكون هو معدل الزيادة فهكذا قيمة i ستبدأ من 2 وتنتهي عند الـ 20 لكن بمعدل زيادة يساوي 4
for i in range(2, 20, 4):
print(i) # i will be from 2, 6, 10, 14, 18 loops 5 times
في المثال الذي في الاعلى قيمة i انتهت عند الـ 18 لان الحد هو 20 فأنت لا تستطيع تجاوزه بمعنى انه ان اضفت 4 إلى 18, فقيمة i ستكون 22 وهكذا أنت قد تجاوزت الـ 20 لذلك انتهت الـ for عند الـ 18
يمكن تبسيط الدالة بالكامل هكذا ← (range(start, end, jump
قيمة i ستبدأ من start وتنتهي عند end – 1 بمعدل زيادة قيمته jump
break
for i in range(5):
if i == 3:
break # it will end the loop and exit
print(i)
الـ break ينهي التكرار ويخرج من الـ for بمعنى انه عندما يصل الـ i إلى 3 فالتكرار سيتوقف ويخرج من الـ for, فهكذا سيتم طباعة 0, 1, 2, ثم يخرج عند 3
continue
for i in range(5):
if i == 3:
continue # ستتجاهل السطور القادمة, وتبدأ دورة جديدة
print(i)
الـ continue تتجاهل التكرار الحالي وكل اسطر الاكواد التي تحتها وتكمل, بمعني أنه سيتم طباعة 0, 1, 2, 4, اي تم تجاهل 3 لكن مع ذلك فإن الـ for استمرت هي فقط تجاهلت الدورة التي كان فيها الـ i تساوي 3
حسنًا تستطيع أن تتحكم بشكل كامل بقيمة المتغير i في أثناء عملية التكرار كما ترى, لكن الأمر لا يختصر على الارقام فقط .. تستطيع أن تدور على عناصر أي مصفوفة, وتجعل المتغير i قيمته في كل دورة تساوي عنصر من المصفوفة
for i in [2, 8, -1, 0, 7]:
print(i) # each loop i will be 2, 8, -1, 0, 7
var arr := [2, 8, -1, 0, 7]
for i in arr:
print(i) # each loop i will be 2, 8, -1, 0, 7
var name := "ahmed"
for i in name:
print(i) # each loop i will be 'a', 'h', 'm', 'e', 'd'
بمعنى ان قيمة i في الدورة الاولى ستكون 2 و في الدورة الثانية ستكون 8 وفي الثالثة ستكون -1 وهكذا, فقيمته ستساوي عنصر من قيمة المصفوفة المعطاة
كما يمكنك استخدام النصوص String, لجعل التكرار يقوم بالدوران على حروف النص مثل المثال الاخير
while
الـ while تكرر الكود بناءًا على شرط محدد
while Condition:
doSomething()
var i := 0
while i < 5:
print(i)
i += 1 # increase i by 1
تكتب هكذا
كلمة (while) ثم (شرط ما) يكون بصيغة boolean بالطبع
وفي المثال الثاني, حرفيا كأنك تقول طالما قيمة i أصغر من 5 نفذ أسطر الكود التالية, فهو سيكرر الكود بناءًا على الشرط المحدد فلو الشرط اعطى true فإنه سينفذ وسيتوقف عندما لا يتحقق الشرط و يعطي false
طبعا يمكنك استخدام break و continue في الـ while
var i := 0
while i < 20
if i < 5:
continue
if i == 15:
break
print(i)
# it will print : 5 6 7 8 9 10 11 12 13 14
# it will skip 0 1 2 4
# and exit from while-loop when i = 15
واليك بعض المقالات التي تعطي شرحًا مفصلًا عن الحلقات التكرارية