Βιβλιοθήκες μέσω κλειώσεων στην JavaScript
Στη JavaScript δημιουργούνται συχνά βιβλιοθήκες, που αντιπροσωπεύουν σύνολα συναρτήσεων για χρήση από άλλους προγραμματιστές.
Αυτές οι βιβλιοθήκες συνήθως τυλίγονται σε μονάδες μέσω κλειώσεων. Αυτό γίνεται για να εμφανίζονται όσο το δυνατόν λιγότερες συναρτήσεις στον εξωτερικό κόσμο κατά τη σύνδεση της βιβλιοθήκης.
Γενικά, κάθε βιβλιοθήκη προσπαθεί να δημιουργεί στον εξωτερικό κόσμο μόνο μία μεταβλητή - ένα αντικείμενο με τις συναρτήσεις της βιβλιοθήκης. Ενώ εσωτερικά στον κώδικα της βιβλιοθήκης, κάποιες συναρτήσεις είναι κύριες και κάποιες - βοηθητικές. Προφανώς, στον εξωτερικό κόσμο θέλουμε να εξάγουμε μόνο τις απαραίτητες συναρτήσεις, χωρίς να γεμίζουμε το εξαγόμενο αντικείμενο με βοηθητικές συναρτήσεις.
Ας δούμε ένα παράδειγμα. Ας υποθέσουμε ότι έχουμε το ακόλουθο σύνολο συναρτήσεων που θα θέλαμε να μετατρέψουμε σε βιβλιοθήκη:
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(''));
}
// βοηθητική συνάρτηση
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
Ας οργανώσουμε τις συναρτήσεις μας σε μορφή μονάδας:
;(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(''));
}
// βοηθητική συνάρτηση
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
})();
Και τώρα ας εξάγουμε όλες τις συναρτήσεις, εκτός από τη βοηθητική:
;(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(''));
}
// βοηθητική συνάρτηση
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
window.math = {square, cube, avg, digitsSum};
})();
Ας υποθέσουμε ότι έχουμε μια HTML σελίδα index.html:
<html>
<head>
<script>
</script>
</head>
</html>
Ας συνδέσουμε τη βιβλιοθήκη μας σε αυτήν:
<html>
<head>
<script src="math.js"></script>
<script>
</script>
</head>
</html>
Ας χρησιμοποιήσουμε συναρτήσεις από τη βιβλιοθήκη μας:
<html>
<head>
<script src="math.js"></script>
<script>
alert(math.avg([1, 2, 3]) + math.square());
</script>
</head>
</html>
Δίνεται ο ακόλουθος κώδικας:
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;
}
// βοηθητική συνάρτηση
function sum(arr, pow) {
let res = 0;
for (let elem of arr) {
res += elem ** pow;
}
return res;
}
Οργανώστε αυτόν τον κώδικα σε μορφή μονάδας. Εξάγετε προς τα έξω όλες τις συναρτήσεις, εκτός από τη βοηθητική.
Μελετήστε τη βιβλιοθήκη underscore.
Δημιουργήστε τη δική σας ανάλογη βιβλιοθήκη, επαναλαμβάνοντας
σε αυτήν 5-10 συναρτήσεις της πρωτότυπης
βιβλιοθήκης.