اهلا بكم في درس جديد وهو
ال control statements وهي التى تسمح لنا بالتحكم في مسار الكود
من انواعها هي (if, elif, else), (for, while), match
من سنشرح كل واحدة منها وسنبدأ بعائلة ال if
انت تعطيها شرط ما فأن تحقق هذا الشرط يبدأ تنفيذ الكود
if Condition is true: # condition must be a boolean expression
doSomething()نكتب if ثم يليها قيمة من النوع bool وكما قلنا ال bool ياخذ true او false
لناخذ مثال
var speed := 400
if speed > 300:
print("Speed exceeded 300")لقد عرفنا متغير السرعة و اعطيناه قيمة 400
ثم بدأنا كتابة الشرط
if speed > 300:
هذا الشرط ان تحقق فسيتم تنفيذ امر الطباعة
print("Speed exceeded 300")
في حالتنا هذه speed > 300 فسيعطينا true لان الشرط تحقق
وان كان الشرط speed < 300 فهكذا سيعطي false
لان الشرط لم يتحقق فال if لن تعمل ولن يتم تنفيذ امر الطباعة
محرك غودوت يستخدم لغة gdscript كما ذكرنا وهي تشبه لغة python الى حد كبير جدا في طريقة الكتابة
هناك مفهوم مهم يجب معرفته عن python وهو ال indentation
هى المسافة التي تبدأ بها لتحدد اسطر الكود التابعة لمجال ما
if true:
print("the codition is true")
# ^ there are 4 spaces here -> tapان لاحظت فنحن كنا نترك مسافة للدخول تحت مجال ال if ويعرف البرنامج ان الاسطر التالية تابعة لل if
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 يمكنك تنفيذ عدة سطور وليس سطر واحد فقط كما تلاحظ
حسنا اذا .. ان لم يتحقق الشرط فلن يتم تنفيذ شيئ
لكن ماذا لو اردنا تنفيذ شيئ في حاله عدم تحقق الشرط
هنا يأتي دور ال else يتم تنفيذها في حاله عدم تحقق الشرط
var speed := 100
if speed > 300:
print("Speed exceeded 300")
else:
print("Speed is less than 300")هذا معناه انه سيتم تنفيذ امر ال else طالما شرط ال if لم يتحقق
لايوجد شىء لاضيفه عليها سوى انه يتم تنفيذه ان لم يتحقق الشرط .. لنتقل للتالي وهو 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 مرة واحدة فقط في النهاية
هذه كانت ادوات الشروط ببساطة
حسنا انه مثل switch تمامًا في باقي اللغات الاخرى مع بعض الاختلافات
لن اتعمق فيه كثيرًا، فقط سأشرح اهم اجزاءه وبعض من خواصه ولن اتعمق فيه كم قلت
ستلاحظ انه يشبه if elif else كثيرا
match Variable:
Value:
doSomething()
Value:
doSomething()
Value:
doSomething()يأخذ متغير ويتحقق من قيمته ثم ينفذ الامر الذي في مجال قيمته
مثال
var x := 20
match x:
10:
print("x is 10")
20:
print("x is 20")
30:
print("x is 30")هكذا سياخذ قيمة x ويذهب ويتفقد قيمته سيجدها 20 فسيذهب للاكواد التى تحت قيمته وينفذها بالتالي في حالتنا هذه فسيطبع x is 20
الامر يشبه فكرة 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")يمكنك ان تدمج اكثر من قيمة كما ترى ان كانت x تساوي 10 او 20 فسيتم تنفيذ اكواد اول حالة
وان كانت تساوي 30 فسيتم تنفيذ الاكواد الخاصة بالحالة 30
ماذا ان لم تساوي اي حالة ؟ هل يوجد شيئ مثل ال else
نعم وهي ال _
var x := 15
match x:
10, 20:
print("x is 10 or 20")
30:
print("x is 30")
_:
print("x is not 10, 20 or 30")ال x تساوي 15 ولا يوجد حالة تساوي 15 بالتالي لن يتم تنفيذ اي شىء فسيدخل في ال _ وينفذ اسطر الكود خاصتها
وسيتم طباعة x is not 10, 20 or 30