⊗jsPmMCLb 505 of 505 menu

Librerie tramite chiusure in JavaScript

Spesso in JavaScript vengono create librerie, che rappresentano insiemi di funzioni per l'utilizzo da parte di altri programmatori.

Tali librerie sono solitamente incapsulate in moduli tramite chiusure. Questo viene fatto in modo che, quando la libreria viene inclusa, nel mondo esterno vengano create il minor numero possibile di funzioni.

Di norma, ogni libreria cerca di creare nel mondo esterno solo una variabile - un oggetto con le funzioni della libreria. In questo caso, all'interno del codice della libreria, alcune funzioni sono principali, mentre altre sono ausiliarie. Ovviamente, nel mondo esterno vogliamo esportare solo le funzioni necessarie, senza ingombrare l'oggetto esportato con funzioni ausiliarie.

Vediamo un esempio. Supponiamo di avere il seguente insieme di funzioni che vorremmo trasformare in una libreria:

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('')); } // funzione ausiliaria function sum(arr) { let res = 0; for (let elem of arr) { res += +elem; } return res; }

Organizziamo le nostre funzioni in un modulo:

;(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('')); } // funzione ausiliaria function sum(arr) { let res = 0; for (let elem of arr) { res += +elem; } return res; } })();

Ed ora esportiamo tutte le funzioni, eccetto quelle ausiliarie:

;(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('')); } // funzione ausiliaria function sum(arr) { let res = 0; for (let elem of arr) { res += +elem; } return res; } window.math = {square, cube, avg, digitsSum}; })();

Supponiamo di avere una pagina HTML index.html:

<html> <head> <script> </script> </head> </html>

Colleghiamo la nostra libreria ad essa:

<html> <head> <script src="math.js"></script> <script> </script> </head> </html>

Utilizziamo le funzioni dalla nostra libreria:

<html> <head> <script src="math.js"></script> <script> alert(math.avg([1, 2, 3]) + math.square()); </script> </head> </html>

È dato il seguente codice:

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; } // funzione ausiliaria function sum(arr, pow) { let res = 0; for (let elem of arr) { res += elem ** pow; } return res; }

Organizzate questo codice in un modulo. Esportate tutte le funzioni, eccetto quelle ausiliarie.

Studiate la libreria underscore. Create una vostra libreria simile, replicando in essa 5-10 funzioni della libreria originale.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta