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

