ilyachalov (ilyachalov) wrote,
ilyachalov
ilyachalov

Categories:

Учебник по JavaScript: ч.1: Генераторы, продвинутая итерация

Прочел двенадцатый раздел («Генераторы, продвинутая итерация») первой части («Язык программирования JavaScript») учебника по JavaScript.

https://learn.javascript.ru

Часть 1. Язык программирования JavaScript (в т.ч. 93 подраздела)

Разделы:

12. Генераторы, продвинутая итерация (2 подраздела)

12.1 Генераторы
12.2 Асинхронные итераторы и генераторы

Генераторы в языке JavaScript — это особые функции (и порождаемые ими объекты). Ключевым словом для их объявления тоже является function, только с добавлением звездочки: function*. Функции-генераторы возвращают не одно-единственное значение, а последовательно (одно за другим, по требованию) — ряд значений. Внутри функции-генератора для возвращения каждого значения из ряда возвращаемых используется ключевое слово yield.

Как реализована работа с функциями-генераторами? При вызове такой функции она возвращает специальный объект для работы с нею (собственно, этот объект можно назвать объектом-генератором). У объекта-генератора есть метод next, который при каждом запуске возвращает очередное значение из функции-генератора. Этот метод next возвращает не просто значение, а тоже объект, имеющий два свойства: value (это свойство и содержит очередное значение) и done (может принимать значения true, либо false; при этом true будет означать, что генерация значений закончена).

Объект-генератор является перебираемым объектом (или итерируемым объектом, по-английски «iterable»). Про перебираемые объекты в учебнике ранее уже рассказывалось в подразделе 5.6 «Перебираемые объекты». Перед изучением двенадцатого раздела я рекомендовал бы этот подраздел 5.6 перечитать. Для перебора возвращаемых объектом-генератором значений можно использовать цикл for..of (это способность любых перебираемых объектов). Использование цикла for..of избавляет программиста от необходимости вручную вызывать каждое значение, возвращаемое функцией-генератором, с помощью вышеописанного метода next.

Из подраздела 5.6 «Перебираемые объекты» нам известно, как можно превратить любой объект в перебираемый (итерируемый). Для этого в объект следует добавить метод с именем Symbol.iterator. Реализацию этого метода можно существенно упростить, сделав этот метод функцией-генератором.

В подразделе 12.2 «Асинхронные итераторы и генераторы» рассматривается то же самое, что и в предыдущем подразделе 12.1 «Генераторы», только теперь — с точки зрения асинхронного программирования (о котором в учебнике было рассказано в предыдущем разделе 11. «Промисы, async/await», я о нем писал).
Tags: Образование, Программирование
Subscribe

  • Эйфелева башня, парижский флёр

    Замечательная картина австралийской художницы Изабеллы Каролевич (Isabella Karolewicz), которая называется «Eiffel Tower, Paris Flair»:…

  • Кэнтаро Миура умер

    Оказывается, 6 мая этого ( 2021) года умер от разрыва аорты японский мангака Кэнтаро Миура. Земля пухом. Ему было всего лишь 54 года. Я его знал…

  • Мифы о большом взрыве, Олег Верходанов

    Никогда не думал, что научная лекция может собрать на ютубе миллион просмотров. И вот она, эта лекция. Ничего не понятно, но очень интересно,…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments