Javascript
Cos’è Javascript
JavaScript è un linguaggio di programmazione che è nato semplicemente come meccanismo per aggiungere logica e interattività a un browser Netscape altrimenti statico. Negli anni successivi alla sua introduzione, non solo ha soppiantato una varietà di altri linguaggi e tecnologie concorrenti per diventare lo standard per la programmazione basata su browser, ma si è anche espanso oltre lo spazio client per diventare un linguaggio dominante anche sul lato server.
A cosa può servire JavaScript
L’Hyper Text Transport Protocol, o HTTP, è stato progettato per fare esattamente ciò che il nome implica, ovvero trasportare testo HTML attraverso una rete per la visualizzazione. Ma il problema con HTML è che è completamente statico, non fornisce alcuna capacità di implementare la logica.
Le funzionalità di base che attualmente diamo per scontate, come la convalida dell’input, la correzione automatica, le barre di avanzamento o la modifica di un’immagine durante il passaggio del mouse, sarebbero tutte impossibili da eseguire per un browser senza un qualche tipo di capacità di scripting. Di conseguenza, quando il web è salito alla ribalta per la prima volta, ogni fornitore in quello spazio ha fornito un meccanismo per rendere le pagine web HTML più interattive.
Alternative a JavaScript
Microsoft ha promosso un concorrente di JavaScript chiamato VBScript, insieme a tecnologie plug-in, come ActiveX Data Object (ADO). Sun Microsystems ha promosso applet Java che erano multipiattaforma e potevano essere utilizzate in qualsiasi browser.
Molte altre tecnologie sono arrivate e se ne sono andate con la maturazione di Internet. Alla fine, JavaScript ha vinto la battaglia per la popolarità ed è l’unica tecnologia di scripting lato client supportata dai browser Chrome, Firefox, Safari e Internet Explorer.
JavaScript è un linguaggio interpretato, a differenza dei linguaggi compilati, come C++ e Java. Ciò significa che il codice scritto in JavaScript non passa attraverso una fase di compilazione intermedia in cui il codice sorgente viene trasformato in linguaggio macchina che è facile da elaborare per una CPU.
Invece, JavaScript viene interpretato al volo dal computer che lo elabora. Poiché il codice JavaScript non è confezionato in una forma adatta alla CPU, come bytecode Java o un eseguibile binario, l’esecuzione del programma può essere più lenta di un programma comparabile scritto in Scala o F#. Tuttavia, i moderni motori JavaScript sono altamente ottimizzati e le inefficienze sono raramente evidenti quando si utilizza hardware moderno.
Breve nota su JavaScript e Java
Date le prime quattro lettere del nome, esiste un malinteso sul fatto che JavaScript e Java siano simili. Mentre è vero che Java e JavaScript condividono alcuni elementi di sintassi molto basilari, come l’uso di punti e virgola per terminare un’istruzione, l’uso di parentesi graffe per delineare blocchi di codice e costrutti simili per creare strutture iterative e di loop, le somiglianze finiscono qui.
I due linguaggi non hanno origine dallo stesso fornitore, i due linguaggi non sono gestiti dallo stesso consorzio e le caratteristiche fondamentali del linguaggio, come l’orientamento agli oggetti e la tipizzazione forte, sono i principali esempi in cui i due differiscono. Java e JavaScript sono due linguaggi di programmazione molto separati e distinti che non devono essere confusi tra loro.
Nozioni di base sulla programmazione JavaScript
HTML fornisce uno speciale tag <SCRIPT> che consente agli sviluppatori di incorporare JavaScript nel markup della pagina.
La dichiarazione di variabili tramite la parola chiave var in JavaScript è molto semplice e non comporta un complesso set di regole di inizializzazione come si potrebbe vedere in Java o C++. JavaScript è noto come linguaggio non tipizzato, il che significa che le variabili possono assumere una varietà di forme diverse durante l’esecuzione di un programma.
Ad esempio, nel seguente programma, una variabile denominata greeting viene dichiarata e inizializzata a una stringa di testo. Ma, nella riga successiva, alla variabile greeting viene assegnato un valore intero di 10. Una nuova variabile denominata product viene quindi inizializzata al valore della variabile greeting moltiplicato per se stessa.
var greeting = 'Ciao Mondo'; greeting = 10; var product = greeting * greeting;
Utilizzo della parola chiave var di JavaScript per dichiarare variabili
Poiché è consentito che una variabile denominata greeting creata come stringa di testo di tipo String cambi al volo in una variabile di tipo intero, JavaScript è noto come linguaggio debolmente tipizzato. In un linguaggio fortemente tipizzato come C++ o Java, questo tipo di trasformazione di variabile innescherebbe un errore di compilazione.
Let vs. var di JavaScript
Storicamente, la parola chiave var è stata utilizzata per avviare la dichiarazione di una variabile. Tuttavia, quando si utilizza la parola chiave var, la variabile può finire per avere un ambito più ampio di quello originariamente previsto, il che può causare conflitti con altre parti del codice che potrebbero dichiarare una variabile con nome simile.
La versione 6 dello standard ECMAScript ha introdotto la parola chiave let per dichiarare le variabili. Sia var che let condividono la stessa sintassi, ma le variabili dichiarate utilizzando la parola chiave var di JavaScript sono limitate alla funzione in cui sono dichiarate, mentre la parola chiave let di JavaScript mantiene la variabile limitata al blocco in cui è stata dichiarata.
{ let greeting = 'Ciao Mondo'; greeting = 10; let product = greeting * greeting; }
Funzioni JavaScript contro metodi
Il contenuto del tag <SCRIPT> può essere codice da richiamare non appena un utente incontra il tag <SCRIPT> oppure può contenere funzioni JavaScript.
Le funzioni JavaScript sono analoghe a ciò che altri linguaggi chiamerebbero metodi. Queste funzioni JavaScript contengono codice che può essere attivato da un evento basato sul browser, come un clic del mouse, il caricamento di una pagina, l’invio di un modulo o la pressione di un tasto. È anche comune che una funzione JavaScript ne richiami un’altra per eseguire un lavoro supplementare.
Esempio di codice JavaScript
Quello che segue è un semplice esempio di un’applicazione sasso-carta-forbici codificata utilizzando HTML e JavaScript. Il tag <SCRIPT> contiene una funzione JavaScript chiamata playRoshambo, che viene attivata dall’evento onclick dell’utente che fa clic su un collegamento di ancoraggio che contiene il testo paper. Il risultato del gioco viene visualizzato all’interno del tag <div> denominato results.
<script> playRoshambo = function(clientGesture) { //il server sceglie sempre pietra if (clientGesture=='pietra') { result = "tie"; } if (clientGesture=='carta') { result = "win"; } if (clientGesture=='forbice') { result = "lose"; } document.getElementById('results').innerHTML = result; } </script> Quale sarà?<br/> <a href="#" onclick="playRoshambo('carta')"> carta </a> <div id="results"></div>
Librerie JavaScript moderne
Il motore JavaScript di base fornito con un browser moderno fornisce solo un set di API di base e rudimentale per lo sviluppo software. Per eseguire attività complicate, come l’implementazione di un ciclo di richiesta-risposta basato su Ajax o persino l’esecuzione di analisi DOM avanzate o manipolazioni di stringhe, è necessario scrivere una grande quantità di codice.
A complicare ulteriormente il compito di scrivere codice per ottenere attività di programmazione comuni ma complesse è il fatto che ci sono differenze tra ciascuno dei principali fornitori in termini di quali versioni di JavaScript implementano, nonché di quanto siano prive di bug tali implementazioni.
Per affrontare le differenze tra i browser e allo stesso tempo fornire codice preconfezionato per eseguire attività molto comuni, le librerie JavaScript sono diventate un pilastro dello sviluppo di interfacce utente basate su browser. La libreria JavaScript più popolare in uso oggi è jQuery, mentre concorrenti come Prototype e Dojo rimangono piuttosto popolari.
Carenze di JavaScript
Due critiche comuni a JavaScript sono il fatto che è debolmente tipizzato e che non è un linguaggio orientato agli oggetti. Gli sviluppatori di software tendono a preferire linguaggi fortemente tipizzati e orientati agli oggetti perché queste funzionalità tendono ad accelerare lo sviluppo del software, contribuendo anche a mantenere un elevato livello di qualità del software.
Tuttavia, poiché JavaScript è diventato il linguaggio de facto dei browser Internet, essere in grado di scrivere codice di alta qualità e privo di bug è diventata una priorità per molti membri della comunità di sviluppo software.
Di conseguenza, sono emersi nuovi linguaggi, come TypeScript, che sono sia fortemente tipizzati che orientati agli oggetti. TypeScript assomiglia molto a JavaScript, sebbene imponga una tipizzazione forte e fornisca funzionalità per lo sviluppo in modo orientato agli oggetti. TypeScript è anche un linguaggio compilato, al contrario di JavaScript, che è interpretato.
Tuttavia, a differenza di Java o C++ in cui il codice sorgente è compilato in bytecode o binario, TypeScript compila in JavaScript puro che può essere ottimizzato in base al browser di destinazione.
Informazioni sui framework JavaScript
Una grande tendenza del settore nella progettazione dell’interfaccia utente è quella di spingere quanta più logica, elaborazione e gestione dello stato possibile sul client e di interagire con il server tramite API RESTful leggere e servizi Web. Ciò ha portato allo sviluppo di framework JavaScript su vasta scala che controllano tutti gli aspetti della presentazione lato client, spesso spingendo un’esperienza utente con interfaccia a pagina singola (SPI).
I framework più popolari in questo spazio sono Angular, React ed Ember, con questi framework che spesso sfruttano linguaggi JavaScript compilati, come TypeScript e librerie JavaScript come jQuery per la logica e Handlebars.js o Mustache.js per i template delle pagine web.