javascript / expert
Snippet
Zustandsmaschinen-Ausführungsengine via Generator-Steuerfluss
Generatoren können als synchrone Zustandsmaschinen dienen, indem sie den Steuerfluss mittels yield an den Aufrufer zurückgeben. Die Übergabe von Werten in iterator.next(input) speist Daten zurück in die Generatorfunktion und ermöglicht vorhersagbare endliche Zustandsübergänge ohne externe Abhängigkeiten.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function* stateMachine(initialState, transitions) {let currentState = initialState;while (currentState !== 'TERMINATED') {const input = yield currentState;const nextState = transitions[currentState]?.[input];if (!nextState) {throw new Error(`Invalid transition from ${currentState} with input ${input}`);}currentState = nextState;}return currentState;}const transitions = {IDLE: { START: 'RUNNING' },RUNNING: { PAUSE: 'PAUSED', STOP: 'TERMINATED' },PAUSED: { RESUME: 'RUNNING', STOP: 'TERMINATED' }};const engine = stateMachine('IDLE', transitions);console.log(engine.next().value); // IDLEconsole.log(engine.next('START').value); // RUNNINGconsole.log(engine.next('PAUSE').value); // PAUSED
nodejs
Erklärung
1
function* stateMachine(initialState, transitions) {
Definiert eine Generatorfunktion zur Initialisierung der Steuerfluss-Zustandslogik.
2
const input = yield currentState;
Gibt den aktuellen Zustand aus und wartet auf Eingaben über next(input).
3
const nextState = transitions[currentState]?.[input];
Wertete den Zustandsübergang basierend auf dem eingehenden Signal aus.