JavaScriptda Yopilishlar orqali Kutubxonalar

JavaScript-da ko'pincha kutubxonalar yaratiladi, ular boshqa dasturchilar foydalashi uchun funksiyalar to'plamidan iborat bo'ladi.

Bunday kutubxonalar odatda yopilishlar orqali modullarga o'raladi. Buning sababi shundaki, kutubxona ulanganda tashqi dunyoda iloji boricha kamroq funksiyalar paydo bo'lsin.

Odatda har bir kutubxona tashqi dunyoda faqat bitta o'zgaruvchi yaratishga harakat qiladi - kutubxona funksiyalari bilan ob'ekt. Shu bilan birga kutubxona kodining ichida ba'zi funksiyalar asosiy, ba'zilari esa yordamchi bo'ladi. Shubhasiz, biz tashqi dunyoga faqat kerakli funksiyalarni eksport qilmoqchimiz, eksport qilinadigan ob'ektni yordamchi funksiyalar bilan to'ldirmaslik.

Keling, misol orqali ko'rib chiqaylik. Faraz qilaylik, bizda quyidagi funksiyalar to'plami mavjud bo'lib, ularni kutubxonaga aylantirmoqchimiz:

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(''));
}

// yordamchi funksiya
function sum(arr) {
  let res = 0;
  
  for (let elem of arr) {
    res += +elem;
  }
  
  return res;
}

Keling, funksiyalarimizni modul shaklida rasmiylashtiramiz:

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(''));
  }
  
  // yordamchi funksiya
  function sum(arr) {
    let res = 0;
    
    for (let elem of arr) {
      res += +elem;
    }
    
    return res;
  }
})();

Endi esa yordamchi funksiyadan tashqari barcha funksiyalarni eksport qilamiz:

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(''));
  }
  
  // yordamchi funksiya
  function sum(arr) {
    let res = 0;
    
    for (let elem of arr) {
      res += +elem;
    }
    
    return res;
  }
  
  window.math = {square, cube, avg, digitsSum};
})();

Faraz qilaylik, bizda index.html HTML sahifasi mavjud:

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

Keling, unga kutubxonamizni ulaymiz:

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

Keling, kutubxonamizdagi funksiyalardan foydalanamiz:

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

Quyidagi kod berilgan:

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;
}

// yordamchi funksiya
function sum(arr, pow) {
  let res = 0;
  
  for (let elem of arr) {
    res += elem ** pow;
  }
  
  return res;
}

Ushbu kodni modul shaklida rasmiylashtiring. Yordamchi funksiyadan tashqari barcha funksiyalarni tashqariga eksport qiling.

Задание 2

underscore kutubxonasini o'rganing. O'zingizning shunga o'xshash kutubxonangizni yarating, unda asl kutubxonaning 5-10 ta funksiyasini takrorlang.