Skip to content

Latest commit

 

History

History
207 lines (157 loc) · 7.03 KB

File metadata and controls

207 lines (157 loc) · 7.03 KB

السلام عليكم ورحمة الله وبركاته

--{ أدوات التحكم }--

الدرس الثاني - 02

اهلا بكم في درس جديد وهو ال control statements وهي التى تسمح لنا بالتحكم في مسار الكود
من انواعها هي (if, elif, else), (for, while), match
من سنشرح كل واحدة منها وسنبدأ بعائلة ال if

if else elif Statements

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

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

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

حسنا اذا .. ان لم يتحقق الشرط فلن يتم تنفيذ شيئ لكن ماذا لو اردنا تنفيذ شيئ في حاله عدم تحقق الشرط
هنا يأتي دور ال 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 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