تعلم لغة GDscript: ادوات التحكم #2

GDscriptبرمجة

اهلا بك في الدرس الثاني من دورة تعلم لغة GDscript, هذا الدرس ساتكلم عن شيئ جديد, الا وهو الـ  control statements او ادوات التحكم, وهي التي تسمح لك بالتحكم في مسار الكود.

من انواعها هي (if, elif, else), (for, while), match ), ساشرح كل واحدة منها وسابدأ بعائلة الـ if

شروط الـ( if-else-elif )

انت تعطيها شرط ما فأن تحقق هذا الشرط يبدأ تنفيذ الكود

# المثال الاول
if Condition is true: # يجب أن يكون الشرط تعبيرًا منطقيًا
    doSomething()

# المثال الثاني
var speed := 400
if speed > 300:
    print("Speed exceeded 300")

اكتب if ثم يليها قيمة من النوع bool وكما قلت في الدرس السابق, الـ bool يأخذ true او false , ومثلما هو موضح في المثال الثاني, فقد عرفنا متغير السرعة و أعطيناه قيمة 400, ثم بدأنا كتابة الشرط

if speed > 300:

هذا الشرط أن تحقق فسيتم تنفيذ أمر الطباعة,print(“Speed exceeded 300”), في حالتنا هذه speed اكبر من 300, بالتالي نحصل علي true لان الشرط تحقق, وإن كان الشرط speed أصغر من 300 فهكذا سيعطي false, لأن الشرط لم يتحقق فالـ if لن تعمل ولن يتم تنفيذ أمر الطباعة.

(لاحظ علامات الـ< و > التي تعبر عن القيمة الاكبر والاصغر)

لغة gdscript هي لغة تشبه لغة بايثون إلى حد كبير جدا في طريقة الكتابة, هناك مفهوم مهم يجب معرفته عن بايثون وهو الـ (المسافات الفارغة – indentation)

المسافات الفارغة – Indentation

هى المسافة التي تبدأ بها لتحدد اسطر الكود التابعة لمجال ما

# المثال الاول
if true:
    print("the condition is true")
# ^ يوجد 4 مسافات هنا -> tap
# المثال الثاني
if true:
    print("the codition is true")
    print("i am inside the if scope")
    print("i am still inside ;)")
    print("i am outside the if scope")

ان لاحظت فنحن كنا نترك مسافة للدخول تحت مجال الـ if ويعرف البرنامج ان الاسطر التالية تابعة للـ if

في المثال الثاني, أول ثلاث أوامر طباعة داخل مجال الـ if هكذا سيتم تنفيذهم ان تحقق الشرط, اما أمر الطباعة الاخير فهو خارج مجال الـ if فليس له علاقة بالشرط,
حسنًا داخل مجال الـ if يمكنك تنفيذ عدة سطور وليس سطر واحد فقط كما تلاحظ

else

اذا ان لم يتحقق الشرط فلن يتم تنفيذ شيئ, لكن ماذا لو اردنا تنفيذ شيئ في حاله عدم تحقق الشرط؟ هنا يأتي دور الـ else يتم تنفيذها في حاله عدم تحقق الشرط

var speed := 100
if speed > 300:
    print("Speed exceeded 300")
else:
    print("Speed is less than 300")

هذا معناه انه سيتم تنفيذ أمر الـ else طالما شرط الـ if لم يتحقق, لا يوجد شىء لاضيفه عليها سوى انه يتم تنفيذه ان لم يتحقق الشرط .. لنتقل للتالي وهو elif

elif

هو اختصار لـ else if ومعناها انه اذا لم يتحقق شرط الـ if الأول فسيدخل إلى else لكن بشرط زائد وهو شرط الدخول للـ else لهذا سموه elif, مثلا : 

if speed == 200:
    print("Speed is 200")
elif speed == 100:
    print("Speed is 100")
else:
    print("Speed  is not 100 or 200")

هكذا ان كانت قيمة speed تساوي 200 فسيتم تنفيذ الشرط الأول فقط دون البقية, وان كانت تساوي 100 فشرط الـ if لن يتحقق فسيتم الدخول في الـ elif فسيرى أن الشرط تحقق فيتم تنفيذه, وان كانت لا تساوي أي من 100 او 200 فلا يوجد شرط تحقق.

طالما لا يوجد شرط تحقق فسيتم تنفيذ الـ else, بمعني انه سيرى elif ان لم يتحقق if و سيتم تنفيذ else طالما لا يوجد شرط تحقق.

يمكنك كتابة اكثر من elif واحدة ويتم كتابة if مرة واحد فقط في الأول ويتم كتابة else مرة واحدة فقط في النهاية.

match

حسنًا انه مثل switch تمامًا في باقي اللغات الأخرى مع بعض الاختلافات, لن اتعمق فيه كثيرًا، فقط سأشرح اهم اجزاءه وبعض من خواصه, ستلاحظ انه يشبه if elif else كثيرا
فيأخذ متغير ويتحقق من قيمته ثم ينفذ الأمر الذي في مجال قيمته.

match Variable:
    Value:
        doSomething()
    Value:
        doSomething()
    Value:
        doSomething()

مثال

var x := 20
match x:
    10:
        print("x is ten")
    20:
        print("x is twenty")
    30:
        print("x is thirty")

هكذا سيأخذ قيمة x ويذهب ويتفقد قيمته سيجدها 20 فسيذهب للاكواد التي تحت قيمته وينفذها بالتالي في هذه الحالة سيطبع x is twenty, اي (x هي عشرون).

الأمر يشبه فكرة if elif else فعلا .. لكن هناك بعض الفروق ..
لا يمكنك كتابة شرط يتحقق من مدى القيمة مثل if x > 8, فلا يمكنك استخدام اشارات > < في الـ match
فالـ match تتفقد بقيم محدد وثابتة للمتغير وليس بمدى معين للمتغير, والـ match يكون اسرع في ناحية القيم الثابتة والمحددة من الـ if elif else

كما ينطبق عليه المسافات الفارغة – indentation كما ترى

var x := 20
match x:
    10, 20:
        print("x is 10 or 20")
    30:
        print("x is 30")
    _:
        print("x is not 10, 20 or 30")

وكما ترى يمكنك ان تدمج اكثر من قيمة, ان كانت x تساوي 10 او 20 فسيتم تنفيذ اكواد أول حالة, وان كانت تساوي 30 فسيتم تنفيذ الاكواد الخاصة بالحالة 30
ماذا ان لم تساوي أي حالة ؟ هل يوجد شيئ مثل الـ else, نعم وهي الشرطة السفلية ( _ ) المتواجدة في النهاية

ففي حالة كانت x = 15 مثلا, فسيتم طباعة (x is not 10, 20 or 30)

4.4 7 votes
Article Rating
Subscribe
نبّهني عن
guest

1 تعليق
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
guygui
guygui
1 شهر

جيد