JavaScript-də Qapalılıqlar vasitəsilə Kitabxanalar
Tez-tez JavaScript-də digər proqramçılar tərəfindən istifadə üçün funksiyalar dəsti təşkil edən kitabxanalar yaradılır.
Belə kitabxanalar adətən qapalılıqlar vasitəsilə modullara bükülür. Bu ona görə edilir ki, kitabxana qoşulduqda xarici dünyada mümkün qədər az funksiya peyda olsun.
Bir qayda olaraq, hər bir kitabxana xarici dünyada yalnız bir dəyişən yaratmağa çalışır - kitabxananın funksiyaları olan bir obyekt. Eyni zamanda, kitabxananın daxilində kodda bəzi funksiyalar əsas, bəziləri isə köməkçi funksiyalardır. Aydındır ki, biz xarici dünyaya yalnız lazım olan funksiyaları ixrac etmək istəyirik, ixrac edilən obyekti köməkçi funksiyalarla çirkləndirmirik.
Gəlin bir nümunəyə baxaq. Tutaq ki, bizim kitabxanaya çevirmək istədiyimiz aşağıdakı funksiyalar dəsti var:
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(''));
}
// köməkçi funksiya
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
Gəlin funksiyalarımızı modul şəklində təşkil edək:
;(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(''));
}
// köməkçi funksiya
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
})();
İndi isə köməkçi funksiya istisna olmaqla, bütün funksiyaları ixrac edək:
;(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(''));
}
// köməkçi funksiya
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
window.math = {square, cube, avg, digitsSum};
})();
Tutaq ki, bizim index.html HTML səhifəsi var:
<html>
<head>
<script>
</script>
</head>
</html>
Gəlin ona kitabxanamızı qoşaq:
<html>
<head>
<script src="math.js"></script>
<script>
</script>
</head>
</html>
Gəlin kitabxanamızın funksiyalarından istifadə edək:
<html>
<head>
<script src="math.js"></script>
<script>
alert(math.avg([1, 2, 3]) + math.square());
</script>
</head>
</html>
Aşağıdakı kod verilmişdir:
function 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;
}
// köməkçi funksiya
function sum(arr, pow) {
let res = 0;
for (let elem of arr) {
res += elem ** pow;
}
return res;
}
Bu kodu modul şəklində təşkil edin. Köməkçi funksiya istisna olmaqla, bütün funksiyaları xarici dünyaya ixrac edin.
underscore kitabxanasını öyrənin.
Özünüzün oxşar kitabxanasını yaradın, orijinal kitabxananın
5-10 funksiyasını təkrarlayın.