Page 223 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 223
удалить этапы? Достаточно удалить их из массива. Необходимо добавить этап? До
статочно добавить его в массив.
Один из примеров - графические преобразования. Если вы создаете некое про
граммное обеспечение для визуализации, "конвейер" преобразований будет часто
использоваться во многих местах. Вот пример обычных двумерных преобразований.
const s i n = Math . s in;
const cos = Math . c o s ;
const theta = Mat . P I / 4 ;
h
const zoom = 2 ;
const offset = [ 1 , - 3 ] ;
const pipeline = [
function rotate ( p )
return {
х : р . х * cos ( theta ) - р . у * sin ( t het ) ,
a
a
у : р . х * sin ( theta) + р . у * cos ( t het ) ,
} ;
} ,
function scale ( p ) {
return { х : р . х * zoom, у : р . у * zoom } ;
} ,
function translate ( p )
return { х : р . х + offset [ O ] , у : р . у + offset [ l ] ; } ;
} ,
] ;
/ / pipeline - это массив функций для определенного двумерного
/ / преобразования, теперь мы можем п р еобразовать точку:
cons t р = { х : 1 , у : 1 } ;
let р2 = р ;
for (let i=O ; i<pipeline . l ength; i++) {
р2 = pipeline [ i ] (р2 ) ;
/ / теперь р2 - это pl , повернутая на 45 градусов (pi/ 4 радиан) вокруг
1 1 начала координат, передвинутая на 2 единицы от начала координат, а
/ / затем смещенная на 1 единицу вправо и на 3 вниз
Этот очень простой пример для графических преобразований, но мы надеемся,
что он дает вам представление о мощи хранения функций в массиве. Обратите вни
мание на синтаксис применения каждой функции в конвейере: pipeline i ] обра
[
щается к элементу i конвейера, который предоставляет функцию. Затем вызывается
функция (круглые скобки). Ей передается объект точки, после чего он снова при
сваивается сам себе. Таким образом, объект точки - это кумулятивный результат
выполнения каждого этапа в конвейере.
226 Глава 1 З. Функции и мощь абстрактного мышления

