تعلم لغة GDscript: الحلقات التكرارية #5

GDscriptبرمجة

اهلا بكم في درس جديد في دورة تعلم لغة 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

واليك بعض المقالات التي تعطي شرحًا مفصلًا عن الحلقات التكرارية

4.7 3 votes
Article Rating
Subscribe
نبّهني عن
guest

0 تعليقات
Inline Feedbacks
View all comments