Las preguntas son:
- ¿Los generadores rompen el paradigma de programación funcional? ¿Por qué o por qué no?
- En caso afirmativo, ¿se pueden usar generadores en la programación funcional y cómo?
Considera lo siguiente:
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
El downCounter
método parece apátrida. Además, llamar downCounter
con la misma entrada siempre dará como resultado la misma salida. Sin embargo, al mismo tiempo, las llamadas next()
no producen resultados consistentes.
No estoy seguro de si los generadores rompen o no el paradigma de programación funcional porque en este ejemplo counter
es un objeto generador y, por next()
lo tanto, la llamada produciría los mismos resultados que otro objeto generador creado con exactamente el mismo maxValue
.
Además, llamar someCollection[3]
a una matriz siempre devolvería el cuarto elemento. Del mismo modo, llamar next()
cuatro veces a un objeto generador también siempre devolvería el cuarto elemento.
Para más contexto, estas preguntas se plantearon mientras trabajaba en un kata de programación . La persona que respondió a la pregunta, planteó la pregunta de si los generadores podrían usarse o no en la programación funcional y si tienen o no estado.