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

التحول في الوصف هو استخدام تقنية 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