In JavaScript sind Generatoren Funktionen, die es ermöglichen, eine Iteration zu pausieren und sie später wieder aufzunehmen, wo sie aufgehört hat. Dies ist besonders nützlich für Dinge wie asynchrone Programmierung.
Ein Generator wird mit dem Schlüsselwort `function*` definiert und kann dann mit dem Schlüsselwort `yield` an einem bestimmten Punkt in der Funktion pausiert werden.
Hier ist ein einfaches Beispiel:
```javascript
function* simpleGenerator() {
yield ‘erster Wert’;
yield ‘zweiter Wert’;
yield ‘dritter Wert’;
}
const gen = simpleGenerator();
console.log(gen.next().value); // ‘erster Wert‘
console.log(gen.next().value); // ‘zweiter Wert‘
console.log(gen.next().value); // ‘dritter Wert’
console.log(gen.next().value); // undefined
```
In diesem Beispiel haben wir einen einfachen Generator definiert, der drei Werte ausgibt. Mit der `next`-Methode können wir durch diese Werte iterieren. Jedes Mal, wenn wir `next` aufrufen, gibt der Generator das nächste `yield`-Statement zurück.
Wir können auch Werte in einen Generator hinein senden, indem wir sie als Argument an die `next`-Methode übergeben:
```javascript
function* generatorWithInput() {
const x = yield ‘Bitte Eingabe’;
console.log(x);
}
const gen = generatorWithInput();
console.log(gen.next().value); // ‘Bitte Eingabe‘
gen.next(‘Eingabe tatsächlich’); // Loggt ‘Eingabe tatsächlich’ in der Konsole
```
In diesem Beispiel senden wir dem Generator eine Eingabe, die er dann ausgibt.
Generatoren können auch mit Schleifen verwendet werden, um durch längere Datenstrukturen zu iterieren:
```javascript
function* idMaker() {
let index = 0;
while (index < 3)
yield index++;
}
const gen = idMaker();
console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
```
In diesem Beispiel haben wir einen Generator, der mithilfe einer Schleife Zahlen von 0 bis 2 generiert.
Generatoren sind ein sehr mächtiges Werkzeug in JavaScript, das für viele verschiedene Probleme verwendet werden kann. Sie erfordern jedoch etwas Übung, um sie effektiv zu nutzen.