JavaScript'te Kapanışlar ile Kütüphaneler
JavaScript'te sıklıkla, diğer programcıların kullanımı için fonksiyon koleksiyonları olan kütüphaneler oluşturulur.
Bu tür kütüphaneler genellikle kapanışlar aracılığıyla modüllere sarılır. Bu, kütüphane harici dünyaya bağlanırken mümkün olduğunca az fonksiyonun ortaya çıkması için yapılır.
Kural olarak, her kütüphane harici dünyada yalnızca bir değişken oluşturmaya çalışır - kütüphane fonksiyonlarına sahip bir nesne. Aynı zamanda, kütüphane kodunun içinde bazı fonksiyonlar ana fonksiyonlar iken, bazıları yardımcı fonksiyonlardır. Açıkçası, harici dünyaya yalnızca gerekli fonksiyonları dışa aktarmak, dışa aktarılan nesneyi yardımcı fonksiyonlarla kirletmemek istiyoruz.
Bir örnek üzerinden gidelim. Diyelim ki bir kütüphaneye dönüştürmek istediğimiz aşağıdaki fonksiyon koleksiyonumuz 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(''));
}
// yardımcı fonksiyon
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
Fonksiyonlarımızı bir modül olarak düzenleyelim:
;(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(''));
}
// yardımcı fonksiyon
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
})();
Şimdi yardımcı fonksiyon haricindeki tüm fonksiyonları dışa aktaralım:
;(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(''));
}
// yardımcı fonksiyon
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
window.math = {square, cube, avg, digitsSum};
})();
Diyelim ki bir HTML sayfamız index.html var:
<html>
<head>
<script>
</script>
</head>
</html>
Kütüphanemizi bu sayfaya bağlayalım:
<html>
<head>
<script src="math.js"></script>
<script>
</script>
</head>
</html>
Kütüphanemizdeki fonksiyonları kullanalım:
<html>
<head>
<script src="math.js"></script>
<script>
alert(math.avg([1, 2, 3]) + math.square());
</script>
</head>
</html>
Aşağıdaki kod verilmiştir:
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;
}
// yardımcı fonksiyon
function sum(arr, pow) {
let res = 0;
for (let elem of arr) {
res += elem ** pow;
}
return res;
}
Bu kodu bir modül olarak düzenleyin. Yardımcı fonksiyon dışındaki tüm fonksiyonları dışa aktarın.
underscore kütüphanesini inceleyin.
Orijinal kütüphanenin 5-10 fonksiyonunu tekrarlayarak
kendi benzer kütüphanenizi oluşturun.