Pytania są następujące:
- Czy generatory łamią paradygmat programowania funkcjonalnego? Dlaczego lub dlaczego nie?
- Jeśli tak, czy generatory mogą być używane w programowaniu funkcjonalnym i jak?
Rozważ następujące:
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
downCounterMetodą wydaje bezstanowy. Również wywoływanie downCounterz tym samym wejściem zawsze będzie skutkować tym samym wyjściem. Jednocześnie jednak wywoływanie next()nie daje spójnych wyników.
Nie jestem pewien, czy generatory łamią paradygmat programowania funkcjonalnego, ponieważ w tym przykładzie counterjest obiektem generatora, a więc wywołanie next()dałoby takie same wyniki jak inny obiekt generatora utworzony z dokładnie takim samym maxValue.
Również wywołanie someCollection[3]tablicy zawsze zwróci czwarty element. Podobnie, next()czterokrotne wywołanie obiektu generatora zawsze zwróci czwarty element.
Dla większego kontekstu pytania te zostały podniesione podczas pracy nad kata programistycznym . Osoba, która odpowiedziała na pytanie, zadała pytanie, czy generatory mogą być używane w programowaniu funkcjonalnym i czy posiadają stan.