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  З. Функции и мощь абстрактного мышления
   218   219   220   221   222   223   224   225   226   227   228