JavaScript è oramai un linguaggio solido, robusto e collaudato, ma sopratutto utilizzato praticamente ovunque; tuttavia, la maggior parte degli sviluppatori web lo ha spesso visto come un semplice
giocattolo. "
Pro JavaScript Techniques" si propone di introdurre il lettore alla pratica di tecniche professionali, che permettano di trattare JavaScript esattamente alla stregua degli altri linguaggi di programmazione, e lo fa spiegandone le
peculiarità, le
best practice, l'uso di
plug-in aggiuntivi e introducendo strumenti per il debugging e il testing del codice.
Il testo è dunque rivolto a un'audience composta da utenti già a conoscenza degli aspetti fondamentali del JavaScript e con l'obiettivo di apprendere, con un livello di dettaglio più ampio, il linguaggio, nonché di imparare nuove tecniche che permettano loro di scrivere del codice che risulti essere più riusabile, meno soggetto a bug,
cross-browser e stabile.
L'autore,
John Resig, è un vero
guru del linguaggio JavaScript: è infatti creatore e
lead developer della libreria
jQuery, oltre a numerosi altri progetti
Web-based, rappresentando già di per sé una garanzia per il lettore circa la qualità dei contenuti presentati.
Il volume contiene
moltissimi esempi di codice, alcuni relativi all'utilizzo dell'argomento introdotto, talvolta di carattere didattico per illustrare dei concetti dietro una tematica o all'implementazione di una libreria consigliata, altri volutamente errati o inefficienti al fine di mostrare, per via incrementale, la versione migliorata o corretta, ma anche veri e propri snippet, metodi e mini-librerie pronti all'uso per gli sviluppatori JS. Le librerie, in particolare, sono davvero utili in quanto potrebbero immediatamente essere riproposte con soluzioni
ad hoc per il nostro progetto, e quasi sempre possono essere direttamente scaricate e utilizzate così come mostrate al lettore. Inoltre, alcuni capitoli costituiscono dei veri e propri tutorial, fornendo all'utente delle
mini-applicazioni già completamente funzionanti.
Lungo l'esposizione non mancano i riferimenti a
link e risorse esterne, permettendo all'utente di approfondire gli argomenti sviluppati. Tutto il codice riportato nel testo è reperibile sul
sito associata (sotto la voce "Code"). Nella sezione "Case Studies" vi sono invece le
demo delle applicazioni mostrate nel testo. Tuttavia, segnalo che non sono riuscito a visualizzare quelle relative ai capitoli 8 e 11.
L'autore suddivide il testo in quattro parti, tre nella pratica, se si considera che l'ultima parte è un brevissimo saggio sul futuro di JavaScript; le altre parti trattano lo sviluppo di codice JS professionale, la creazione di codice non invasivo nelle pagine web e l'utilizzo di
AJAX per scrivere applicazioni più potenti e con una migliore
user experience.
Più in dettaglio, il
primo capitolo introduce a tutti gli argomenti che saranno successivamente trattati nel testo, mostrando al lettore la già citata suddivisione in 4 macroblocchi.
Il
capitolo 2 analizza lo sviluppo orientato agli oggetti, mostrando come questi in JavaScript si distinguano rispetto agli altri linguaggi di programmazione e come utilizzarli per scrivere del codice più solido e robusto; il capitolo tratta anche le altre caratteristiche essenziali — comunque di natura avanzata — del linguaggio, quali i
reference, l'
overloading delle funzioni, il controllo sui tipi, lo
scope, un'introduzione alle
closure e i
context. I temi sono abbastanza complessi, e certamente non risultano essere immediati; il testo li affronta comunque nel modo corretto, scegliendo o di fornire una spiegazione più o meno esaustiva, o semplicemente di introdurre in breve il lettore alla tematica, nella consapevolezza del fatto che dovrà approfondire altrove l'argomento e che necessiterà di tempo e pratica per raggiungere la padronanza della tecnica in oggetto.
Il
capitolo 3 si concentra sulle metodologie principali per scrivere del codice che sia più riusabile, ben organizzato e di più alta qualità. Nella prima parte queste tecniche vengono applicate alla programmazione ad oggetti, mostrando vari metodi e librerie per ricreare dei meccanismi di ereditarietà ben strutturati e standardizzati. Nella seconda parte sono mostrate alcune tecniche presenti in altri linguaggi, ma applicate al JS come il
namespacing, le convenzioni più importanti nella scrittura del codice, la compressione del sorgente e la sua distribuzione.
Nel
quarto capitolo viene fatta una panoramica dei vari tool per il debug e i test con JS. Tutti questi strumenti sono analizzati per i diversi browser, e vengono mostrate 3 suite per scrivere casi di test:
JsUnit,
J3Unit e
Test.Simple.
Con il
quinto capitolo inizia la parte sulla scrittura di codice JavaScript non invasiva, ossia che presenti una netta separazione tra il codice di presentazione dei contenuti e il codice per l'interazione con l'utente, ma sopratutto in grado di definire dei comportamenti che risultino essere scalabili, in maniera trasparente e naturale, ai browser più vecchi che non dovessero supportare determinate feature. Si comincia con un'interessante introduzione, sia teorica che pratica, sul
Document Object Model (DOM), menzionando anche le possibili alternative come
Xpath. Interessante lo spunto fornito al lettore sul problema della sincronizzazione tra il JavaScript e il documento HTML quando si utilizza il
DOM.
Il
capitolo 6 prosegue concentrandosi sull'analisi degli eventi; il loro funzionamento in JavaScript è di natura rigorosamente asincrona, e l'autore ne approfitta per spiegare al lettore le differenze rispetto alla programazzione
thread-based. La trattazione prosegue con le diverse tipologie di eventi e il binding ad elementi
DOM, per poi riprendere il tema della non invasività del codice scritto.
Il
capitolo 7 esamina invece l'interazione tra il JS e i
fogli di stile, al fine di dotare la pagina di comportamenti dinamici che aumentino l'interazione con l'utente; viene mostrato come catturare alcuni particolari valori quali il posizionamento di un elemento nella pagina, la sua altezza e la visibilità associata, utilizzando queste informazioni per creare delle animazioni. Viene anche mostrato come reperire la posizione del mouse o informazioni sullo schermo al fine di creare l'effetto del
drag-and-drop. Il capitolo si chiude con l'introduzione ad alcune librerie che implementano già i principali effetti grafici, evitando di dover reinventare la ruota:
moo.fx,
jQuery e
script.aculo.us.
Con le tecniche affrontate nei capitoli precedenti, l'autore passa a illustrare una serie di esempi di applicazioni scritte in JavaScript. Nel
capitolo 8 ci si concentra sui
form; vengono mostrati metodi per ottenere la loro validazione, come ad esempio i controlli in caso di presenza di campi obbligatori, oppure l'uso delle espressioni regolari per controllare che l'utente inserisca numeri di telefono o formati di e-mail validi, per poi mostrare come migliorare l'usabilità e l'interazione da parte dell'utente con i form. Il
capitolo 9 è invece una guida avente l'obiettivo di realizzare una galleria d'immagini. Prima sono mostrate due soluzioni già disponibili (
LightBox e
ThickBox), dopo di che si parte con la creazione della nostra galleria. È un vero e proprio tutorial: tutte le diverse feature sono costruite in maniera incrementale, dalla struttura alla navigazione e all'effetto di
slideshow, ed è riportato tutto il codice utilizzato.
I capitoli che vanno
dal 10 al 13 analizzano lo sviluppo con
AJAX. Il primo è un'introduzione ben scritta sull'argomento, mostrando in maniera dettagliata tutti i principali aspetti teorici, nonché l'interazione con JS e le necessarie manipolazioni sui dati. I capitoli seguenti rappresentano invece dei casi di studio e delle guide allo sviluppo di alcune applicazioni
AJAX. In ordine, viene mostrato come
migliorare i blog con informazioni che vengono caricate dinamicamente (sia andando a bordo pagina per ottenere ulteriori notizie cronologicamente meno recenti, sia ottenendo update automatici delle notizie man mano che sono aggiunte alla pagina), come implementare la funzionalità dell'autocompletamento dei campi di ricerca nei form, in pieno stile Google, e come creare un'applicazione Wiki con un motore interamente sviluppato in JavaScript.
L'
ultimo capitolo illustra brevemente al lettore la direzione verso cui il linguaggio JavaScript sta andando, mostrando le innovazioni apportate al nucleo di JS con le versioni 1.6 e 1.7, le potenzialità dell'utilizzo combinato di JavaScript con HTML5 prendendo
Canvas come esempio pratico e introducendo
Comet (e il relativo progetto
CometD), nato con lo scopo di fornire le funzionalità di streaming assenti in
AJAX.
Il libro presenta inoltre
tre appendici: la prima è una reference sul
DOM, completo di nomenclatura, attributi e metodi per intervenire sul documento HTML; la seconda appendice è un altrettanto completo e ben documentato documento sul tema degli eventi, suddivisi per categoria e corredando l'elenco con degli esempi; l'appendice C è invece un brevissimo richiamo alle diverse versioni dei principali browser, aggiornate ovviamente al periodo di stesura del libro. Un
indice analitico dei termini principali chiude il volume.
Concludendo, questo testo può rappresentare il tramite per passare da una conoscenza di base del linguaggio a delle conoscenze di livello medio-avanzato, strutturando il codice con un approccio più ingegneristico e utilizzando tutte le feature presenti e prima sconosciute di questo potente e versatile linguaggio.