Ответ вслух Middle Итераторы и генераторы обновлено

Итераторы и генераторы

Вопрос

Что такое итератор и генератор, где они применяются?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Итератор - объект с методом next(), отдающим {value, done}. Объект перебираем в for...of, если у него есть [Symbol.iterator], возвращающий итератор.

Что должно прозвучать в ответе

  • итератор - объект с методом next, возвращающим {value, done}

  • перебираемый объект - тот, у которого есть Symbol.iterator

  • генератор создаётся через function* и возвращает итератор

  • yield приостанавливает выполнение и отдаёт значение

  • генератор может быть бесконечным - значения считаются лениво

  • применение: ленивые последовательности, пагинация, конечные автоматы

Что могут спросить следом

  • Как написать генератор бесконечной последовательности Фибоначчи
  • Что делает yield* и зачем
  • Как обойти дерево рекурсивным генератором

Разбор

Итератор - объект с методом next(), отдающим {value, done}. Объект перебираем в for...of, если у него есть [Symbol.iterator], возвращающий итератор.

Генератор (function*) - самый простой способ его написать: yield приостанавливает выполнение и отдаёт значение, а состояние функции сохраняется между вызовами. Это даёт ленивые и даже бесконечные последовательности, постраничный обход API и конечные автоматы (на этом построена redux-saga).

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.