02. Iterators
Итераторы являются общим стандартном передачи данных между источником данных и их получателем.
Источник данных реализует итератор.
Потребитель данных ожидает итератор для получения данных.
В этом смысле итераторы в ES6 формируют протокол (интерфейс и множество правил его использования).
Iterable object
Объект является итерируемым, если на нем определен Symbol.iterator
. При вызове метода Symbol.iterator
перебираемый объект, реализующий протокол итератора.
Интерфейс итератора:
Правила итератора:
Вызов
Symbol.iterator
должен возвращать новый итератор на каждый свой вызов.Итератор должен возвращать данные последовательно.
Итератор должен возвращать по одному объекту за раз.
Iterator protocol
По стандарту у объекта итератора должен быть метод next()
, который при каждом вызове возвращает объект следующей структуры { value: any, done: boolean}
value
— очередное значение,done
— равноfalse
, если есть ещё значения, иtrue
— в конце.
Итерация прекращается когда возвращается объект с {done: true}
. Это последний шаг итерации. При стандартном алгоритме итерации, значение, возвращаемое на последнем шаге игнорируется.
Привет простого итератора:
Возможны и бесконечные итераторы. Нет никаких ограничений на next
, он может возвращать всё новые и новые значения, и это нормально.
Last updated
Was this helpful?