Der Standardansatz zur Beschreibung der Abfolge von Benutzereingaben und Reaktionen darauf (z. B. bei der Steuerung eines Charakters in einem Spiel) ist eine Zustandsmaschine. Dies führt jedoch häufig zu umständlichen Programmen, deren Verständnis einen erheblichen Aufwand oder sogar das Skizzieren auf Papier erfordert. In diesem Artikel schlage ich eine kleine Verschiebung in der Beschreibung vor, die Bildschirmplatz und Gehirnressourcen spart.

Die Verschiebung in der Beschreibung ist die Verwendung der Coroutine-Technik. Um diese Technik anzuwenden, müssen Sie sich vorstellen, welche Art von
Verhalten wir als Ergebnis vom Computer erwarten. Daher habe ich die kleine Bibliothek aufgerufen, die ich für diese Aufgabe erstellt habe - Verhalten.
Wenn der Benutzer mit dem Programm interagiert, wartet der Computer auf eine bestimmte Aktion und reagiert auf Eingaben auf eine bestimmte Weise. Primitive Verhaltensweisen und ihre Kombinationen können sperrige Zustandsmaschinen ersetzen, die häufig formal oder informell in Programmen enthalten sind. Wenn ein Programm beispielsweise darauf wartet, dass eine bestimmte Taste gedrückt wird, können wir sagen, dass es das Verhalten waitForKey (...) ausführt. Der Vorteil besteht darin, dass Verhaltensweisen im Gegensatz zu Zustandsautomaten in einer leicht lesbaren Form kombiniert werden. Ein einfaches Beispiel für Drag & Drop:
* DragAndDrop = * draggedObject = MouseDown - * First * MouseUp * Forever * MouseMove * draggedObject
Verhalten hat einen Anfang, ein Ende und kann einen Wert zurückgeben. Verhaltensweisen werden der Reihe nach ausgeführt oder können mithilfe von Kombinatoren parallel ausgeführt werden. Beispielsweise führt der erste Kombinator mehrere Verhaltensweisen parallel aus und endet, wenn eines der Verhaltensweisen beendet ist, und gibt sein Ergebnis zurück. Für immer - wiederholt die Ausführung eines bestimmten Verhaltens bis ins Unendliche. Im Gegensatz zur Funktionsausführung blockiert Behavior nicht den Hauptthread der Ausführung, sodass unendliche Verhaltensweisen sehr nützlich sein können.
Ich habe Behaviours mithilfe von Funktionen implementiert, die primitive Ereignisse (wie MouseDown, MouseUp, MouseMove, ...) als Parameter empfangen und ein Objekt der Form erzeugen:
{ done: true|false, value: result value }
Sie können die Implementierung hier sehen:
behaviour.js auf GitHub und das Drag & Drop-Beispiel hier:
jsFiddle .
Wo können Verhaltensweisen eingesetzt werden?
- Computerspiele - es ist sehr praktisch, Logik und KI zu schreiben. Manchmal mache ich sogar alles mit Verhalten, einschließlich Animation und Bewegung von Objekten, aber Sie müssen die Leistung überwachen
- Tutorial im Frontend (Tour durch neue Funktionen) - Informationen anzeigen, auf Benutzerinteraktion warten, je nach Eingabe fortfahren, den gesamten Code an einem Ort und fast wie Pseudocode lesen
- Der themenorientierte Sprachparser ist ein idiomatischer Code. Sie müssen bei der Eingabe nicht nach vorne schauen, da Sie mehrere Verhaltensweisen parallel ausführen können
Foto:
Verhalten von Nick Youngson CC BY-SA 3.0 Alpha Stock Bilder