السلوكيات - آلة الدولة دون صداع

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


الصورة

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

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

* DragAndDrop = * draggedObject =  MouseDown  -  * First *  MouseUp * Forever *  MouseMove *  draggedObject 

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

قمت بتطبيق السلوكيات باستخدام الوظائف التي تتلقى الأحداث البدائية (مثل MouseDown و MouseUp و MouseMove ، ...) كمعلمة وإنتاج كائن من النموذج:

 { done: true|false, value: result value } 

يمكنك رؤية التطبيق هنا: behavior.js على GitHub ومثال السحب والإفلات هنا: jsFiddle .

أين يمكن استخدام السلوكيات؟

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

الصورة: السلوك بواسطة Nick Youngson CC BY-SA 3.0 Alpha Stock Images

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


All Articles