Die Fragen sind:
- Brechen Generatoren das Paradigma der funktionalen Programmierung? Warum oder warum nicht?
- Wenn ja, können Generatoren in der funktionalen Programmierung verwendet werden und wie?
Folgendes berücksichtigen:
function * downCounter(maxValue) {
yield maxValue;
yield * downCounter(maxValue > 0 ? maxValue - 1 : 0);
}
let counter = downCounter(26);
counter.next().value; // 26
counter.next().value; // 25
// ...etc
Die downCounter
Methode scheint zustandslos zu sein. Wenn Sie downCounter
mit der gleichen Eingabe aufrufen , erhalten Sie immer die gleiche Ausgabe. Gleichzeitig führt der Aufruf next()
jedoch nicht zu konsistenten Ergebnissen.
Ich bin nicht sicher, ob Generatoren das funktionale Programmierparadigma brechen oder nicht, da es sich in diesem Beispiel counter
um ein Generatorobjekt handelt und ein Aufruf daher next()
zu denselben Ergebnissen führen würde wie ein anderes Generatorobjekt, das mit denselben Ergebnissen erstellt wurde maxValue
.
Wenn Sie someCollection[3]
ein Array aufrufen, wird immer das vierte Element zurückgegeben. In ähnlicher Weise next()
würde ein viermaliger Aufruf eines Generatorobjekts auch immer das vierte Element zurückgeben.
Für mehr Kontext wurden diese Fragen während der Arbeit an einer Programmier-Kata aufgeworfen . Die Person, die die Frage beantwortet hat, hat die Frage aufgeworfen, ob Generatoren für die funktionale Programmierung verwendet werden können und ob sie den Status haben oder nicht.