JavaScript-ի փակումներով գրադարաններ

Հաճախ JavaScript-ում ստեղծվում են գրադարաններ, որոնք ներկայացնում են ֆունկցիաների հավաքածուներ այլ ծրագրավորողների կողմից օգտագործման համար:

Նման գրադարանները սովորաբար փաթաթվում են մոդուլների մեջ փակումների միջոցով: Դա արվում է այն նպատակով, որ գրադարանը միացնելիս արտաքին աշխարհում հնարավորինս քիչ ֆունկցիաներ հայտնվեն:

Որպես կանոն, յուրաքանչյուր գրադարան ձգտում է ստեղծել արտաքին աշխարհում միայն մեկ փոփոխական - գրադարանի ֆունկցիաներով օբյեկտ: Մինչդեռ ներսում գրադարանի կոդում ֆունկցիաներից մի մասը հանդիսանում են հիմնական, իսկ մյուս մասը` օժանդակ: Ակնհայտ է, որ մենք ցանկանում ենք արտաքին աշխարհ էքսպորտել միայն անհրաժեշտ ֆունկցիաները, չխցանելով էքսպորտվող օբյեկտը օժանդակ ֆունկցիաներով:

Դիտարկենք օրինակով: Ենթադրենք, մենք ունենք ֆունկցիաների հետևյալ հավաքածուն, որը մենք ցանկանում ենք վերածել գրադարանի.

math.jsfunction square(num) {
  return num ** 2;
}
function cube(num) {
  return num ** 3;
}
function avg(arr) {
  return sum(arr, 1) / arr.length;
}
function digitsSum(num) {
  return sum(String(num).split(''));
}

// օժանդակ ֆունկցիա
function sum(arr) {
  let res = 0;
  
  for (let elem of arr) {
    res += +elem;
  }
  
  return res;
}

Եկեք ձևավորենք մեր ֆունկցիաները որպես մոդուլ.

math.js;(function() {
  function square(num) {
    return num ** 2;
  }
  function cube(num) {
    return num ** 3;
  }
  function avg(arr) {
    return sum(arr, 1) / arr.length;
  }
  function digitsSum(num) {
    return sum(String(num).split(''));
  }
  
  // օժանդակ ֆունկցիա
  function sum(arr) {
    let res = 0;
    
    for (let elem of arr) {
      res += +elem;
    }
    
    return res;
  }
})();

Այժմ էքսպորտենք բոլոր ֆունկցիաները, բացառությամբ օժանդակի.

math.js;(function() {
  function square(num) {
    return num ** 2;
  }
  function cube(num) {
    return num ** 3;
  }
  function avg(arr) {
    return sum(arr, 1) / arr.length;
  }
  function digitsSum(num) {
    return sum(String(num).split(''));
  }
  
  // օժանդակ ֆունկցիա
  function sum(arr) {
    let res = 0;
    
    for (let elem of arr) {
      res += +elem;
    }
    
    return res;
  }
  
  window.math = {square, cube, avg, digitsSum};
})();

Ենթադրենք ունենք HTML էջ index.html.

index.html<html>
  <head>
    <script>
      
    </script>
  </head>
</html>

Միացնենք դրան մեր գրադարանը.

index.html<html>
  <head>
    <script src="math.js"></script>
    <script>
      
    </script>
  </head>
</html>

Օգտագործենք մեր գրադարանի ֆունկցիաները.

index.html<html>
  <head>
    <script src="math.js"></script>
    <script>
      alert(math.avg([1, 2, 3]) + math.square());
    </script>
  </head>
</html>
Задание 1

Տրված է հետևյալ կոդը.

javascriptfunction avg1(arr) {
  return sum(arr, 1) / arr.length;
}

function avg2(arr) {
  return sum(arr, 2) / arr.length;
}

function avg3(arr) {
  return sum(arr, 3) / arr.length;
}

// օժանդակ ֆունկցիա
function sum(arr, pow) {
  let res = 0;
  
  for (let elem of arr) {
    res += elem ** pow;
  }
  
  return res;
}

Ձևավորեք այս կոդը որպես մոդուլ: Էքսպորտեք դուրս բոլոր ֆունկցիաները, բացառությամբ օժանդակի:

Задание 2

Ուսումնասիրեք underscore գրադարանը: Ստեղծեք ձեր սեփական նմանատիպ գրադարանը, կրկնելով դրանում օրիգինալ գրադարանի 5-10 ֆունկցիաները: