Рубрики
Без рубрики

Demystingify ES6 Iterables & Iterators

Tiago Lopes Ferreira Demystingify ES6 ITERABLABLES & ITERATORATERS6 вводит новый способ взаимодействия с помощью структур данных JavaScript – итерацией. Давайте демистифицировать это. Существует 2 основных концепция: итеративные – описанные структурой данных, которая предоставляет способ раскрытия своих данных на публику. Это делается

Автор оригинала: FreeCodeCamp Community Member.

Tiago Lopes Ferreira

ES6 вводит новый способ взаимодействия с помощью структур данных JavaScript – Итерация Отказ Давайте демистифицировать это.

Есть 2 основных концепция:

  • ИТЕРИТЕЛЬНО – описан структурой данных, которая обеспечивает способ раскрытия своих данных на публику. Это делается путем внедрения метода, ключ которого является Symbol.itereator Отказ Symbol.itereator это фабрика итераторов.
  • Итератор – описывается структурой, которая содержит указатель на следующий элемент в итерации.

Протокол

Как итератор, и ITERATOR Следуют протоколу, который позволяет объектам быть имеющим в действие:

  • Соответственно Должен быть объектом с функцией итератором, ключ которого является Symbol.itereator Отказ
  • итератор Должен быть объектом с функцией, названной Следующий Это возвращает объект с ключами: ценность – текущий предмет в итерации; и сделаноправда Если итерация закончилась, ложь иначе.

Потери правности

Имеямость следит за идеей Источники данных и Потребители данных :

  • Источники данных – Место из того, где потребители данных получают свои данные. Например, Массив такие как [1,2,3] является структурой источника данных, которая содержит данные, через которые потребуется потребитель данных (например, 1, 2 и 3 ). Больше примеров – Строка , Карты и Наборы Отказ
  • Потребители данных – Являются ли то, что потребляют данные из источников данных. Например, для Цикл – это потребитель данных, способный итерацию за Массив источник данных. Больше примеров являются Распространение оператора и Array.rom Отказ

Для структуры быть Источник данных , ему необходимо разрешить и сказать, как следует употреблять его данные. Это делается через Итераторы Отказ Поэтому, а Источник данных Нужно следовать протоколу итератору, описанному выше.

Тем не менее, это не практично для каждого Потребитель данных Чтобы поддержать все Источники данных Тем более, что JavaScript позволяет нам построить собственные источники данных. Так что ES6 представляет интерфейс ИТЕРИТЕЛЬНО Отказ

Потребители данных Потребляйте данные из Источники данных через по темпам Отказ

На практике

Давайте посмотрим, как это работает на определенном источнике данных – Массив Отказ

ИТЕРАЛНЫЕ ИСТОЧНИКИ ДАННЫХ

Мы будем использовать для Чтобы исследовать некоторые из источников данных, которые реализуют ИТЕРАЛНЫЙ ПРОТОКОЛЬКИ Отказ

Простые предметы

На этом этапе нам нужно сказать, что простой объекты не являются итерацией. Axel Rauschmayer отличная работа, объясняя почему на Исследуя ES6 Отказ

Краткое объяснение состоит в том, что мы можем повторять объекты JavaScript на двух разных уровнях:

  • Уровень программы – что означает, что итерации по свойствам объекта, которые представляют его структуру. Например, Array.prototype.length , где Длина связано с структурой объекта, а не в данных.
  • Уровень данных – означает, что итерация по структуре данных и извлечение его данных. Например, для нашего Массив Пример, это будет означать итерацию по данным массива. Если массив = [1,2,3,4] , Итерация за ценности 1, 2, 3 и 4 Отказ

Проблема с простыми объектами – это способность к тому, что всякая «создавать свои собственные объекты».

В приведении нашего Хьюго, как будет выделен JavaScript между уровнем данных, то есть. Hugo.fullname. и уровень программы, то есть. Hugo.tostring () ?

Хотя можно различить два уровня итерации на четко определенных структурах, таких как Массивы , это невозможно сделать для любого объекта.

Вот почему мы получаем итерацию бесплатно на Массив (Также на Строка , Карта и Set ) Но не на простых объектах.

Реализуйте показывать

Мы можем построить свои собственные итерасле, хотя обычно мы используем генераторы для этого.

Для того, чтобы построить наши собственные, нам нужно следовать итерационному протоколу, который говорит:

  • Объект становится ИТЕРИТЕЛЬНО Если он реализует функцию, ключ которой является Symbol.itereator и возвращает итератор Отказ
  • итератор Сам объект с функцией под названием Следующий внутри него. Следующий должен вернуть объект с двумя ключами ценность и сделано Отказ ценность Содержит следующий элемент итерации и сделано Флаг, говоря, если итерация закончилась.

Пример

Наша истеченная реализация очень проста. Мы следовали за ИТЕРАЛНЫЙ ПРОТОКОЛЬКИ и на каждой итерации для Цикл спросит итератор для Следующий элемент.

Наш итератор вернется на Следующий Объект, содержащий следующее по итерации:

Обратите внимание, что мы переключаем заказ наших свойств Следующий и сделано для удобства. Наличие Следующий Во-первых, он сломал бы реализацию, поскольку мы сначала поп-элемент, а затем подсчитаете элементы.

Полезно знать, что сделано это ложь По умолчанию, что означает, что мы можем игнорировать его, когда это так. То же самое верно для ценность Когда сделано это правда Отказ

Мы увидим это через минуту.

Итератор как итеративный

Мы могли бы построить наш итератор как итеративный.

Обратите внимание, что это шаблон, за которым следует встроенные итераторы ES6.

Почему это полезно?

Хотя для Работает только с меткой, а не с итераторами, тем же означает, что мы можем приостановить выполнение для и продолжать после слова.

Возвращение и бросить

Есть два дополнительных метода итератора, которые мы еще не изучали:

Возвращаться

Возвращение дает итератору возможность очистить дом, когда он неожиданно ломается. Когда мы называем Возвращение На итераторе мы указываем, что мы не планируем звонить Следующий больше.

Бросать

бросить применяется только к генераторам. Мы увидим, что когда мы играем с генераторами.

Заключение

ES6 приносит итерацию как новый способ повторения структур данных JavaScript.

Для того, чтобы эта комбинация для работы гладко итерация определяется протоколом, который говорит:

  • ИТЕРИТЕЛЬНО это объект, который реализует функцию, ключ которой является Symbol.itereator и возвращает итератор Отказ
  • итератор объект с функцией под названием Следующий внутри него. Следующий это объект с двумя ключами ценность и сделано Отказ ценность Содержит следующий элемент итерации и сделано Флаг, говоря, если итерация закончилась.

Простые предметы не ИТЕРИТЕЛЬНО Поскольку нет простого способа различить программу и итерацию уровня данных.

Вот почему ES6 предлагает способ создания собственных итераторов, следуя итератор протокол.

Благодаря ?

Обязательно проверьте мои другие статьи на ES6

Давайте исследуем генераторы ES6 Генераторы – это реализация повторных документов. medium.freecodeCamp.com.