Teegid sulundite kaudu JavaScriptis
Sageli luuakse JavaScriptis teegid, mis on funktsioonide kogumid teiste programmeerijate kasutamiseks.
Sellised teegid mähitakse tavaliselt sulundite abil moodulitesse. Seda tehakse selleks, et teegi ühendamisel välimises keskkonnas tekiks võimalikult vähe funktsioone.
Tavaliselt püüab iga teek luua välismaailmas ainult ühe muutuja - objekti teegi funktsioonidega. Samas teegi koodis on osa funktsioonidest põhilised ja osa - abistavad. Ilmselgelt tahame välismaailma eksportida ainult vajalikke funktsioone, mitte ummistada eksporditavat objekti abifunktsioonidega.
Vaatame näidet. Oletame, et meil on järgmine funktsioonide kogum, mida me sooviksime teegiks muuta:
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(''));
}
// abistav funktsioon
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
Vormistame oma funktsioonid moodulina:
;(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(''));
}
// abistav funktsioon
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
})();
Ja nüüd ekspordime kõik funktsioonid, välja arvatud abistavad:
;(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(''));
}
// abistav funktsioon
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
window.math = {square, cube, avg, digitsSum};
})();
Oletame, et meil on HTML-leht index.html:
<html>
<head>
<script>
</script>
</head>
</html>
Ühendame sellega oma teegi:
<html>
<head>
<script src="math.js"></script>
<script>
</script>
</head>
</html>
Kasutame oma teegi funktsioone:
<html>
<head>
<script src="math.js"></script>
<script>
alert(math.avg([1, 2, 3]) + math.square());
</script>
</head>
</html>
Antud on järgmine kood:
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;
}
// abistav funktsioon
function sum(arr, pow) {
let res = 0;
for (let elem of arr) {
res += elem ** pow;
}
return res;
}
Vormistage see kood moodulina. Eksportige välja kõik funktsioonid, välja arvatud abistav.
Uurige teeki underscore.
Looge oma sarnane teek, korrates
selles 5-10 originaalteegi
funktsioone.