Page 203 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 203

ГЛАВА  2
                                                                                 1
                                         р а
                                  И  те торы и г              е н е р а т о р   ы










          В спецификацию ЕSб  введено две очень важные новые концепции:  итераторы
       (iterator) и генераторы (generator). Г е нераторы связаны с итераторами, поэтому да­
       вайте начнем с итераторов.
          Итератор напоминает закладку: он помогает следить, где вы находитесь. Массив -
       пример итерируемого (iteraЫe) объекта: он содержит множество элементов (по аналогии
       со страницами в книге) и может предоставить итератор (который похож на закладку).
       Давайте сделаем эту аналогию конкретней: предположим, что у вас есть массив book
       (книга), каждый элемент которого - строка, представляющая страницу. Формату такой
       книги лучше всего соответствует стишок "Twinkle, T w inkle, Little Bat" (Крокодильчики
       мои, цветики речные!1) из Алисы в стране чудес Льюиса Кэрролла (представьте, что у вас
       детская книжка, на каждой странице которой расположена всего одна строчка).
       const  book  =  [
                          e
                 l
           " T wink e ,   twinkl ,   l i ttle  ba ! " ,
                                      t
           "How  I  wonder  what  yo ' r e  at ! " ,
                               u
           "Up  above  the  world  you  fly, " ,
           "Like  а  tea  tray  in  the  s k y . " ,
                                      t
           " T winkle,  twinkle,  l i ttle  ba ! " ,
                               u
           "How  I  wonder  what  yo ' r e  at ! " ,
       ]  ;
          Теперь, когда у нас есть массив book, мы можем получить итератор, используя его
       метод values.
                    o
       const  it  =  bo k . values ( ) ;
          Продолжая нашу аналогию, итератор (обычно сокращаемый как it) является за­
       кладкой, но это закладка только для конкретной книги. Кроме того, мы ее еще ни­
       куда не поместили и мы еще не начали читать книгу. Чтобы "начать читать", необхо­
       дим вызов метода next итератора, который возвращает объект с двумя свойствами:
       value, который содержит текущую "страницу", и done, которому присваивается зна­
             t
       чение  r ue после того, как вы прочитаете последнюю страницу. Наша книга - дли­
       ной  лишь  шесть страниц, поэтому довольно просто  продемонстрировать, как мы
       можем прочитать ее полностью.

       1 Пересказ с английского Бориса Заходера. - Примеч. ред.
   198   199   200   201   202   203   204   205   206   207   208