molily: Event-gesteuerte Programmabläufe

Beitrag lesen

Hallo,

Wir hatten deine Frage anscheinend schon im Thread  </archiv/2011/7/t206186/>. Dort hatte JürgenB eigentlich sehr schön erklärt, dass dir anscheinend noch das Verständnis für Event-basierte Programmabläufe fehlt und dass du damit auf basaler Ebene herumexperimentieren solltest. Dein jetzige Code scheint schon so ein Experiment zu sein, allerdings fehlt wohl noch die entscheidende Wendung.

Was du anscheinend vorhast ist folgendes:

1. Mache etwas
2. Warte auf eine Benutzereingabe
3. Fahre mit der Verarbeitung fort

Wie Jürgen gesagt hat, kannst du so ein Problem nicht mit Rückgabewerten lösen. Vergiss Übergabe- und Rückgabewerte erst einmal völlig. Diese sind interessant, wenn ein Programm dauerhaft läuft und aktiv auf irgendetwas wartet. Das ist bei JavaScript-Programmen eigentlich nie der Fall. JavaScripte laufen vielleicht mal für ein paar hundert Milisekunden und warten dann auf irgendwelche Ereignisse. Ein JavaScript-Interpreter verfügt über eine Event-Loop, das ist eine Ausführungs-Warteschlange für Funktionen. Und so eine Funktion macht möglichst immer nur eine kleine Sache, dann beendet sie sich.

Bei Event-Handling kommt das Programm ständig zum Stillstand und wird bei einem Event auch nicht an der alten Stelle fortgesetzt, sondern es wird eine Handler-Funktion aufgerufen. Bitte mach dich damit mal vertraut. Wie gesagt: Ein Event-Handler kann keine Daten »zurückgeben«, aber er kann den Wert von gewissen zentralen Variablen ändern und andere Funktionen aufrufen. Vielleicht hilft dir folgendes einfaches Beispiel weiter:

http://jsfiddle.net/gtBbh/

Es gibt hier eine Art »Schleife«, aber nicht im üblichen Sinne (while). Es gibt auch keine Funktionen, die irgendetwas zurückgeben. Es gibt die Event-Handler-Funktion, die jeweils einen Schritt der Verarbeitung durchführt. Der ist in dem Fall sogar recht einfach, da prompt() eine der wenigen Funktionen ist, die die Welt (die Ausführung sämtlicher Scripte im Dokument) anhält. Am Ende dieser Schritt-Funktion wird ein Zähler erhöht, sodass beim nächsten Mal mit das folgende Item bearbeitet wird. Dieser Zähler ist eine Variable in der äußeren Funktion init. Die Handlerfunktion kann auf diese Statusvariable zugreifen und sie abändern. Es kann natürlich viele solcher Variablen geben, um sich den letzten Zustand zu merken und mit der Verarbeitung genau dort weiterzumachen, wo man aufgehört hat. Diese Variablen sollten irgendwo zentral notiert werden. Im Beispiel einfach in der darüberliegenden Funktion, sodass alle Funktionen darin sie mit der äußeren teilen. Diese Kapselung ist empfehlenswert.

Mathias