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

использовать в совершенно другой программе. Давайте создадим файл арр . j s,  в ко­
       тором импортируем эти модули.

                                              a
       const  amanda_calculate  =  require ( '   . / amand . j s ' )  ;
                                             r
       const  t y ler_calculate  =  require ( '   . / tyle . j s  ' )  ;
                 g
       console . l o ( amanda_calculate ( l ,   2 ,   5 ) )  ;    // выводит  31
            l
       conso e . l og ( tyler_calculate ( 2 ) )  ;     // выводит  33. 5 1 0321 638291 1 2 4
          Обратите внимание, что выбранные нами имена (amanda  _  c a l c ulate и  tyler  _
       calculate) совершенно произвольны; это только переменные. Получаемые значения
       являются результатом вызова функции Node require.
          Математически подготовленный читатель уже, вероятно, узнал эти два вычисле­
       ния:  Аманда предоставляет сумму геометрической прогрессии а  + ах + ах2 +  ...  +
       ах•-1, а Тайлер вычисляет объем  сферы  радиусом  r.  Теперь, когда известно, что это
       такое, мы можем упрекнуть Аманду и Тайлера за плохой выбор имен и выбрать бо­

       лее подходящие имена в арр . j s.
       const  geometricSum  =  require ( '   . / amand . j s  ' )  ;
                                           a
                                          r
       const  sphereVolume  =  require ( '   . / tyle . j s  ' ) ;
       conso e . l og ( geometricSum ( l ,   2 ,   5 ) )  ;    / /  выводит  31
            l
       console . l og ( sphereVolume ( 2 ) ) ;     / /  выводит  33 . 5 1 0321 638291 1 2 4
          Модули могут экспортировать значение любого типа (даже базового, хотя на это
       есть немного причин). Обычно ваш модуль будет содержать не одну функцию, а не­
       сколько. В этом случае вы должны экспортировать объект со свойствами функции.
       Предположим, что Аманда - математик, которая снабжает нас многими другими
       полезными алгебраическими функциями, а не только функцией расчета суммы гео­
       метрической прогрессии.

       module . exports  =  {
           geometricSum ( a ,    х,  n )   {
               if ( x   ===  1 )   return  a * n ;
               return  a * ( l   - Math . p ow ( x ,   n ) ) /  ( 1  - х ) ;
           } ,
           arithmeticSum ( n )    {
               return  ( n   +  l ) *n/2;
           } ,
           quadraticFormula ( a ,   Ь,  с )
               const  D  =  Math . s qrt (b*b  - 4 * а * с ) ;
               return  [  ( -Ь  +  D ) / ( 2 * a ) ,  ( - Ь  - D ) / ( 2 * a ) ] ;
           } ,
       } ;
          Это приводит к более традиционному подходу к пространствам имен - мы при­
       сваиваем имя тому, что возвращается из модуля, но возвращаемое значение (объект)
       содержит собственные имена.



                                                                      Модули     321
   313   314   315   316   317   318   319   320   321   322   323