Книга: JavaScript. Подробное руководство, 6-е издание

11.4.5. Выражения-генераторы

11.4.5. Выражения-генераторы

В JavaScript 1.8 [23]

можно заменить квадратные скобки в генераторах массивов круглыми скобками и получить выражения-генераторы. Выражение-генератор похоже на генератор массивов (синтаксис в круглых скобках в точности соответствует синтаксису в квадратных скобках), но его значением является объект генератора, а не массив. Преимущество выражений-генераторов перед генераторами массивов в том, что они используют прием отложенных вычислений - вычисления выполняются по мере необходимости, а не все сразу - и позволяют обрабатывать даже бесконечные последовательности. Недостаток генераторов состоит в том, что они обеспечивают только последовательный доступ к своим элементам. То есть, в отличие от массивов, генераторы не позволяют обращаться к элементам по индексам: чтобы получить n-е значение, придется выполнить n-1 итераций.

Ранее в этой главе мы реализовали функцию map():

// Функция-генератор, возвращающая f(х) для каждого элемента х итерируемого объекта і
function map(і. f) {
  fоr(let x in і) yield f(x);
}

Выражения-генераторы позволяют избежать необходимости создавать или использовать такую функцию map(). Чтобы получить новый генератор h, возвращающий f (х) для каждого значения х, возвращаемого генератором g, достаточно использовать такой программный код:

let h = (f(x) for (x in g));

Используя генератор eachline() из примера 11.1, можно реализовать отсечение пробельных символов, а также фильтрацию комментариев и пустых строк, как показано ниже:

let lines = eachline(text);
let trimmed = (l.trim() for (1 in lines));
let nonblank = (1 for (1 in trimmed) if (1.length > 0 && 1[0]!='#'));

Оглавление книги


Генерация: 1.118. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз