Pustaka melalui Closure di JavaScript
Seringkali di JavaScript dibuat pustaka, yang merupakan kumpulan fungsi untuk digunakan oleh programmer lain.
Pustaka seperti ini biasanya dibungkus ke dalam modul melalui closure. Hal ini dilakukan agar saat pustaka dihubungkan ke dunia luar, sedikit mungkin fungsi yang muncul.
Biasanya, setiap pustaka berusaha untuk membuat hanya satu variabel di dunia luar - sebuah objek yang berisi fungsi-fungsi pustaka. Sementara di dalam kode pustaka, sebagian fungsi merupakan fungsi utama, dan sebagian lagi adalah fungsi pembantu. Jelas, ke dunia luar kita hanya ingin mengekspor fungsi-fungsi yang diperlukan, tanpa mengotori objek yang diekspor dengan fungsi-fungsi pembantu.
Mari kita lihat sebuah contoh. Misalkan kita memiliki kumpulan fungsi berikut yang ingin kita jadikan sebagai pustaka:
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(''));
}
// fungsi pembantu
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
Mari kita kemas fungsi-fungsi kita dalam bentuk modul:
;(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(''));
}
// fungsi pembantu
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
})();
Dan sekarang ekspor semua fungsi, kecuali fungsi pembantu:
;(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(''));
}
// fungsi pembantu
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
window.math = {square, cube, avg, digitsSum};
})();
Misalkan kita memiliki halaman HTML index.html:
<html>
<head>
<script>
</script>
</head>
</html>
Mari hubungkan pustaka kita ke dalamnya:
<html>
<head>
<script src="math.js"></script>
<script>
</script>
</head>
</html>
Mari gunakan fungsi dari pustaka kita:
<html>
<head>
<script src="math.js"></script>
<script>
alert(math.avg([1, 2, 3]) + math.square());
</script>
</head>
</html>
Diberikan kode berikut:
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;
}
// fungsi pembantu
function sum(arr, pow) {
let res = 0;
for (let elem of arr) {
res += elem ** pow;
}
return res;
}
Kemas kode ini dalam bentuk modul. Ekspor keluar semua fungsi, kecuali fungsi pembantu.
Pelajari pustaka underscore.
Buat pustaka Anda sendiri yang serupa, dengan mengulang
5 hingga 10 fungsi dari
pustaka aslinya.