خدش للمتقدم

سكراتش هي لغة برمجة موجهة للأطفال. هناك رأي بأن هذه هي لغة الأطفال من أجل لعب "البرمجة" فقط ولا يمكن صنع أي شيء جيد منها. عندما بدأت تدريس فصول للأطفال على سكراتش ، بدا لي كشخص لديه تعليمان تقنيان أعلى. ومع ذلك ، بعد فترة اضطررت إلى تغيير رأيي. اتضح أنه حتى في لغة برمجة الأطفال هذه ، هناك رقائق مخفية يمكن استخدامها بجدية حتى عند تعلم البرمجة المهنية. أريد أن أشارككم اكتشافاتي.

الاستنساخ والمتغيرات في نقطة الصفر


أحب طلابي اللعبة - "الكسالى ضد النباتات" . وكان مهتمًا ببرمجة ذلك بنفسه. دعونا نتذكر كيف تعمل هذه اللعبة؟ على الجانب الأيمن ، لدينا خط من النباتات يطلق النار على الزومبي.

هناك العديد من الحلول لهذه المشكلة ، ولكن في رأيي أن الحل الأكثر أناقة هو استخدام أقل عدد ممكن من العفاريت ، أي استخدام الاستنساخ.

كيفية جعل كل فرد استنساخ له مستوى معيشي خاص به؟ ماذا تختار المتغيرات أو القوائم؟ لقد حاولوا استخدام القوائم ، ولكن بعد دراسة أكثر تفصيلاً ، أدركوا أن بنية البيانات هذه لا تساعد في حل المشكلة. المتغيرات والقوائم في سكراتش لها نوعان من الرؤية لكل نوع بيانات - وهذا "لجميع العفاريت"أو "فقط لهذا العفريت . " كان علي التحقق من النطاق. بدأنا مع المتغيرات.

بعد الوصول إلى إصدار العمل للمتغير مع النطاق "لهذا العفريت فقط" . في لغات البرمجة الكلاسيكية ، يسمى هذا النوع من الرؤية محليًا أو خاصًا ، اعتمادًا على السياق.

الحياة الأكثر تغيرًا في الصفر


اتضح أنه إذا تم استخدام هذا المتغير مع نطاق معين في الاستنساخ ، فسيتم إنشاء مثيل للمتغير في الاستنساخ الذي ينتمي إلى استنساخ معين ويستخدم للحسابات الداخلية / تشغيل الاستنساخ. في حالتنا ، لكل استنساخ "حياة" خاصة به. إذا أصبح الأمر مثيرًا للاهتمام ، فأنا أنصحك باستشارة الدليل . وهذه صورة توضح كيف تعمل العفاريت أو المستنسخات مع متغيرات من أنواع مختلفة من الرؤية.

نطاقات المتغيرات والقوائم في سكراتش.  وحدودهم
المتغير مع النطاق لجميع العفاريت (الصورة على اليسار) هو واحد للجميع. بالمناسبة ، هنا يمكنك مشاهدة العمل مع الأقسام المهمة مع الأطفال وما هو السباق على المورد. وإذا كان نطاق المتغير هو "لهذا العفريت فقط"، ثم يكون للعفريت واستنساخه متغير خاص بهما بنفس الاسم الذي يعملان به (الشكل من اليمين). ولا تستطيع المستنسخات الوصول إلى المتغير الأصلي ومتغير استنساخ آخر.
كان هذا اكتشافًا غير متوقع وممتع لخصائص سكراتش لإنشاء مثل هذه الخوارزميات.

هام: المتغير هو أداة قوية جدًا لمبرمج حقيقي ، لذلك أقوم بتعليم الأطفال على الفور الاسم الصحيح للمتغيرات ، حيث ستساعدهم هذه المهارة في المشاريع ذات التعقيد المتغير.

أسماء الأشياء كمعرفاتها


هام: جميع المتغيرات مع منطقة رؤية "لهذا العفريت فقط".

كانت هذه الأداة غير متوقعة بالنسبة لي. لنبدأ بقصة حول كيف صادفت أنا وطالب هذه الميزة في اللغة. قرر طلابي إنشاء لعبة مع "الذكاء الاصطناعي". تمثل اللعبة حروب النجوم على سفن الفضاء واللاعب لديه القدرة على التحكم في سفينة واحدة ، بينما يطاردك المنافسون وبعضكم البعض. حتى يتمكنوا من متابعتك أو مع بعضكما البعض ، يجب أن يقرروا بطريقة أو بأخرى من يتابعون. يمكن حل هذه المشكلة في الجبين وتعيين ترتيب ملاحقة السفن ، لكن اللعبة ستفقد ذكائها وستشعر بالملل بسرعة. لذلك ، قرر الطالب تعديل الفكر بحيث تلاحق السفن ذات الذكاء أقرب العدو. دعونا نرى كيف بدأ في حل هذه المشكلة.

حل تمايل للتبديل بين العفاريت على أدنى مسافة

في رأيي حلا جيدا لإنشاء نموذج أولي سريع. ولكن ما هي القيود؟ أولاً ، تعقيد الشفرة عند إضافة سفن جديدة. لذلك ، يزداد تعقيد الكود ولا يتم استبعاد طفرات الكود بسبب التعقيد. سيزداد وقت البحث عن الأخطاء وتصحيح الخوارزمية. وبالطبع ، لم يلغِ أحد مقياسًا رائعًا مثل شيخوخة الشفرة (مستوى SW المتقدم). ماذا تفعل؟ وتحتاج إلى القيام بما يلي ، تحتاج إلى إنشاء خوارزمية معممة تتكيف ديناميكيًا لزيادة أو تقليل عدد السفن.

لهذه الخوارزمية ، نحتاج إلى خاصية لغة - اسم كمعرف لكائن. لقد حان الوقت لإجراء تغييرات كبيرة ، وهنا يمكنك ، كمعلم ، أن تتحدث عن شيء مثل إعادة البناء. يعد هذا تغييرًا تسلسليًا في الشفرة ، مما يحسن هيكلها وتحسينها. والأهم من ذلك ، أن كل تغيير لا يكسر البرنامج ، ويجب أيضًا تحديد مقدار التغيير بعناية فائقة. الكثير من التغييرات سيئة ، وقليل منها طويل. مهارة إعادة البناء المشكلة ستعطي ميزة وكفاءة للمبرمج. ولكن من أجل تشكيل المهارة ، تحتاج إلى العمل مع رأسك ، وليس مجرد التجول. تمكنت من إجراء 4 تغييرات في البرنامج الأصلي ولم تتغير النتيجة.

نحن نحاول تغيير الحل واستخدام التدوير نحو الكائن بالاسم

لاحظ أنني لم أحذف الكتل حتى الآن ، لكني تركتها. لماذا؟ لأنه إذا حدث خطأ ما ، يمكننا إرجاع الخيار السابق ، بدءًا من جديد. ولكن بمجرد التحقق من التنفيذ الصحيح للبرنامج النصي المحدث ، سأقوم بإزالته على الفور حتى لا يشتت انتباههم في المستقبل.

هل لاحظت؟ الآن في كتلة "بدوره إلى ..." هناك متغير ويعمل هذا الشيء. على سبيل المثال تحققنا بأقل مجهود من أن هذا النهج يعمل. هذا رائع الآن يمكننا البدء في كتابة خوارزميات تسمح لنا بتحديد هدف ملاحقة أقرب سفينة.

ما هو مفيد لنا؟ هذا من هياكل البيانات - هذه هي المتغيرات والقوائم. من الخوارزميات ، هذا هو العثور على الحد الأدنى (المسافة) في القائمة. نحتاج أيضًا إلى خوارزمية تحدد اسم الكائن المراد متابعته على أدنى مسافة.

سيتم كتابة الكثير من التعليمات البرمجية الآن. ولكن لكي لا نغرق ونرتبك في كومة من النصوص البرمجية لاحقًا ، نحتاج إلى استخدام وظيفة رائعة أخرى ، وهي إنشاء الكتل الخاصة بنا. هذه الوظيفة قوية جدًا ، ولكن نادرًا ما يتم استخدامها من قبل أطفال المدارس وبعض المبرمجين ، ومع ذلك فهي تسمح لك بإنشاء خوارزمية برنامج مفهومة من القراءة الأولى. بالمناسبة ، يمكنك أن تقرأ عن تقنيات إنشاء كود مفهومة في كتاب مارتن فاولر "إعادة البناء". تحسين الرمز الحالي »

كما هو الحال مع أي بناء واسع النطاق ، نحتاج إلى التخطيط لكل شيء. دعونا نخطط بأي ترتيب سنطور الكتل:

  1. قائمة بأسماء جميع السفن ،
  2. حساب المسافة لجميع السفن ،
  3. البحث عن المسافة الدنيا
  4. ابحث عن اسم السفينة لمتابعة المسافة الدنيا التي تم العثور عليها.

القاعدة الرئيسية هي أن كل "قطعة" تم إنشاؤها ويجب التحقق من التغيير.

من أجل إنشاء خوارزمية معممة ، نحتاج إلى التضحية بشيء ما ، على سبيل المثال ، الأسماء الأصلية للعفاريت ، سيتعين علينا توحيدها والحصول على التخطيط التالي.

أسماء العفريت التي تم تغييرها

والآن نحن على استعداد لوصف جزء واحد من البرنامج. نكتب كل شيء للسفينة الأولى. قم بتشغيل هذا البرنامج النصي بشكل منفصل وانظر النتيجة. دعنا نذهب!

كتلة جديدة: املأ قائمة أسماء السفن

إذا أضفنا سفينة جديدة ، نحتاج إلى تغيير رقم واحد فقط في هذه الخوارزمية. رائع رائع!

سافرنا على. ودعنا نعلمه 2 خوارزمية. نحن ننظر إلى ما حدث. هذه هي النتيجة النهائية على الفور مع الوظائف المساعدة.

كتلة جديدة: املأ قائمة المسافات

مرحى! يعمل. يمكنك التحقق من ذلك على النحو التالي ، يجب أن تكون 0 إحدى القيم في قائمة المسافات. إذا لم يكن الأمر كذلك ، ابحث عن خطأ.

نحن نمضي قدما! ابحث عن الحد الأدنى للمسافة. لاحظت أن المسافة دائما إيجابية. وسيكون هناك دائمًا حد أدنى - 0. Ay-ya-yay! الاستنتاج هو البحث عن الحد الأدنى ، ولكن ليس الصفر. يمكنك تجربة يدك وتحسين الشفرة بنفسك ، حتى لا تحسب المسافة من السفينة 1 إلى السفينة 1 (هذه ليست خطأ مطبعي).

جد الحد الأدنى للقيمة ولكن ليس صفرًا

ندرب نقش الوظيفة الجديدة ونحصل عليها.

كتلة جديدة: البحث عن اسم السفينة عن طريق المسافة

لا تنس التحقق! للقيام بذلك ، يمكنك حتى إيقاف اللعبة وتشغيل برنامج نصي منفصل.

لقد كتبنا كل ما هو ضروري ، الآن الشيء الرئيسي هو استخدام هذه الوظائف بشكل صحيح.

خوارزمية مجمعة لتحديد أقرب سفينة

إذا كان كل شيء يعمل بشكل صحيح ، فيجب أن ترى ما يلي:



لاحظت أن السفينة ذات "الذكاء الاصطناعي" ممزقة بين خصوم مختلفين. يمكنك تحسين البرنامج وتعقيد عملية صنع القرار. على سبيل المثال ، إذا لم يبقَ للسفينة المطاردة سوى القليل من الحياة ، فإنه ينهيها ، وإذا وجدها أقرب وبصحة أقل ، فعليك إنهاء الأضعف أولاً.

بالمناسبة ، في هذا البرنامج يمكنك تقليل عدد الإجراءات وتحسين الخوارزميات. جرب يدك. يمكنك الحصول على هذا البرنامج هنا .

لتلخيص



هنا في مثل هذه الحالات ، تعلمت كيف يمكن Scratch للطلاب من التعلم بسرعة العديد من تقنيات البرمجة الحقيقية. يمكنك أن تتحدث فيه عن عمل الأقسام المهمة ، وعن الخوارزميات المعممة ، وعن المتغيرات ونطاقها ، وعن إنشاء الكتل الخاصة بك وهيكلة التعليمات البرمجية الخاصة بك. وبهذه اللغة أيضًا ، يمكنك التحدث عن المهارات المهنية ، على سبيل المثال ، إعادة البيع.

هذه ليست سوى جزء صغير من مجموعة أدوات المبرمج ، ولكنها مهمة للغاية. وفي تطبيق Scratch ، أصبح الأمر أسهل قليلاً في الشرح.

Source: https://habr.com/ru/post/ar399495/


All Articles