Le domande sono:
- I generatori rompono il paradigma della programmazione funzionale? Perché o perché no?
- Se sì, i generatori possono essere utilizzati nella programmazione funzionale e come?
Considera quanto segue:
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
Il downCounter
metodo appare apolide. Inoltre, chiamando downCounter
con lo stesso input, si otterrà sempre lo stesso output. Tuttavia, allo stesso tempo, la chiamata next()
non produce risultati coerenti.
Non sono sicuro che i generatori rompano o meno il paradigma di programmazione funzionale perché in questo esempio counter
è un oggetto generatore e quindi la chiamata next()
produrrebbe gli stessi risultati di un altro oggetto generatore creato con lo stesso identico maxValue
.
Inoltre, invocare someCollection[3]
un array restituirebbe sempre il quarto elemento. Allo stesso modo, chiamare next()
quattro volte su un oggetto generatore restituirebbe sempre anche il quarto elemento.
Per più contesto, queste domande sono state sollevate mentre si lavorava su un kata di programmazione . La persona che ha risposto alla domanda, ha sollevato la questione se i generatori possano essere utilizzati o meno nella programmazione funzionale e se mantengano o meno lo stato.