Вопросы:
- Разрушают ли генераторы парадигму функционального программирования? Почему или почему нет?
- Если да, могут ли генераторы использоваться в функциональном программировании и как?
Учтите следующее:
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
downCounter
Метод оказывается без гражданства. Кроме того, вызов downCounter
с одним и тем же вводом всегда будет приводить к одному и тому же выводу. Однако, в то же время, звонки next()
не дают последовательных результатов.
Я не уверен, нарушают ли генераторы парадигму функционального программирования, потому что в этом примере counter
это объект генератора, и поэтому вызов next()
вызовет те же результаты, что и другой объект генератора, созданный с точно такой же maxValue
.
Кроме того, вызов someCollection[3]
массива всегда будет возвращать четвертый элемент. Аналогично, next()
четыре раза вызов объекта-генератора также всегда возвращает четвертый элемент.
Для большего контекста эти вопросы были подняты во время работы над ката программирования . Человек, который ответил на вопрос, поднял вопрос, могут ли генераторы использоваться в функциональном программировании и имеют ли они состояние.