PassFront
  1. PassFront
  2. База знаний
  3. Поведенческие паттерны

Что такое паттерн Iterator и зачем он нужен?

Поведенческие паттерны

Iterator даёт последовательный доступ к элементам коллекции, не раскрывая её внутреннее устройство: массив, дерево и поток обходятся единообразно.

Контракт

  • next() возвращает элемент или сигнал конца; в большинстве языков итератор встроен в протокол цикла for x in collection.
  • Итератор — объект с состоянием (позицией): обход можно приостановить и продолжить.

Зачем он нужен

  • Клиент не зависит от представления: обход дерева в глубину выглядит как обход списка.
  • Ленивость: итератор по файлу или бесконечной последовательности не материализует данные целиком — на этом построены генераторы.
  • Несколько независимых обходов одной коллекции одновременно.

Нюансы

  • Модификация коллекции во время обхода: fail-fast итераторы бросают исключение, snapshot-итераторы идут по копии.
  • Внешний итератор (им управляет клиент) против внутреннего (коллекция сама гоняет коллбэк, как forEach).

Коротко для собеседования

Iterator — курсор с методом next(), который обходит любую структуру одинаково и не раскрывает её устройство. В JS это протокол Symbol.iterator, на нём работают for-of, spread и генераторы; главные ловушки — изменение коллекции во время обхода и повторное использование одноразового итератора.

Другие вопросы раздела