Javascript
   

Introduzione                   

Quando si parla di Javascript si pensa subito al Web. E in effetti si tratta di un linguaggio rivolto principalmente a quel mondo anche se ultimamente ci sono interessanti sviluppi anche per il mondo desktop. Nonostante sia stato pensato circa 25 anni fa, non è mai stato così in forma tanto che, relativamente al 2014, è stato eletto "language of the year" da noto sito Tiobe.
La storia di questo linguaggio inizia ufficialmente intorno al 1995-1996, quando Brendan Eich, programmatore americano, fu incaricato di studiare un linguaggio di scripting da inseire nel browser Netscape, al fine di gestire meglio di quanto fosse possibile allora, l'interattività tra browser e utente. In una decina di giorni Eich tirò fuori un prototipo del linguaggio che si chiamato "Mocha" (già si sentono gli influssi di Java anche per questo brutto nome) successivamente rinominato LiveScript (bellino) e quindi, in via definitiva, JavaScript, per sfruttare l'effetto fionda dovuto alla crescente popolarità di Java, d'altronde esisteva una collaborazione con Sun, all'epoca proprietaria dello strumento ideato da Gosling e dal suo staff. Chiariamo subito che Java e Javascript potranno anche avere qualche somiglianza sintattica, come molti linguaggi C-Like, oltre che nel nome, ma sono completamente diversi nella grande maggioranza degli aspetti. La vicinanza in termini di nomi  ha dato il via a qualche ambiguità e i problemi iniziali di Java sono stati in qualche caso attribuiti anche all'innocente linguaggio di Eich. Altri tempi, comunque. Tempi che peraltro ben presto videro la discesa in campo di un altro pesante attore: Microsoft. Riconoscendo la bontà dell'idea del team di Netscape, la casa di Redmond creò una sua versione del linguaggio chiamata JScript molto simile a javaScript ma, appunto, non identica il che, si capisce, dà subito luogo ad un problema  per chi scrive siti: con quale browser si collega l'utente? Bisogna individuarlo e fornire lo script giusto... il famoso, e ancora attuale, problema noto come "browser detection" ne parleremo. La storia andò avanti un po'... e arriviamo a ECMAScript. Questo è il nome, che coinvolge naturalmente la European Computer Manufacturer Association, che propose uno standard per il linguaggio. Questo standard, noto come ECMA-262, venne implementato dai due principali contendenti, come detto Microsoft e Netscape, ciascuno a modo suo il che lenì ma non eliminò il problema creato dal dualismo dei due. ECMA-262 ha subito diverse revisione, al momento in cui scrivo siamo arrivati alla versione 6 ma altre ne seguiranno. Nonostante gli sforzi, ancora non siamo giunti ad una univocità di comportamento tra i vari browser, anche perchè i contenuti sono diventati nel frattempo semprè più evoluti e sofisticati. ECMAScript, è bene saperlo, non è identificabile solo con JavaScript, le sue direttive hanno una valenza generale, ad esempio anche ActionScript, il linguaggio interno di Adobe Flash, ne rispetta l'impostazione.
 
A questo punto entriamo un po' negli aspetti tecnici e vediamo subito due parole che fanno parte del mondo Java Script ovvero DOM e BOM. La prima sigla sta Document Object Model e, in soldonio, permette di rappresentare ogni documento in forma di albero permettendo di lavorare su ciascun nodo. In maniera grossolana possiamo ad esempio mostrare quanto segue:

  Esempio 1.1
1
2
3
4
5
6
7
8
<html>
  <head>
    <title>Titolo</title>
  <head>
  <body>
     <a href="test.html">Test</a>
  </body>
</html>

che può essere ricostruito in stile DOM:



Non è difficile capire la potenzialità di questo modello che permette di costruire un ponte tra la morfologia di un documento e l'esterno.

Un altro elemento che gravita intorno a Javascript, che come abbiamo detto si chiama BOM è ovviamente anch'esso un acronimo e sta per Browser Object Model. Si tratta di uno strato un po' più complesso ed anche in questo caso non completamente standardizzato. In breve, una pagina in un browser viene vista come una finestra, un oggetto "window". BOM permette di interagire e manipolare tale finestra ad esempio in caso di ridimensionamento oppure spostamento, gestisce i pop-up ed altri oggetti specifici come location, screen ecc... Detto così è un po' nebuloso forse ma se ci pensate è l'anello mancante per avere un completo controllo del browser e del suo contenuto.
Sia di DOM che di BOM parleremo diffusamente in appositi paragrafi.

Concludendo questa breve presentazione vediamo qualche caratteristica del linguaggio:

è un linguaggio di scripting. Ovvero non c'è un compilatore che crea un eseguibile per la piattaforma sottostante. Ogni programma Javascript ha necessità di un "ospite" che ne permetta l'esecuzione. Tipicamente questo ospite è il browser del client ma anche alcune applicazioni di Adobe, ad esempio, sono adatte allo scopo. Questo è il primo fondamentale aspetto.
il fatto di girare sul client lo rende ideale dal punto di vista prestazionale ed evita di appesantire il server. Di contro può generare una certa latenza nel caricamento della pagina se questa si porta dietro molto codice di script. L'introduzione della tecnologia che va sotto l'acronimo di AJAX ha invece mitigato fortemente le problematiche relativo allo scambio di dati in molte situazioni. Ovviamente ne parleremo a suo tempo.
è un linguaggio ad oggetti anche se non in maniera esasperata come Java o Ruby, dove tutto è per forza (o quasi) un oggetto; inoltre è definito come prototyped-based. Vedremo cosa vuol dire.
è dinamico con una tipizzazione di tipo debole (a me sto fatto non piace molto ma tant'è).
Tipicamente è utilizzato con l'approccio "a oggetti", per quanto si è detto, ma ha alcuni aspetti che permettono di implementare l'approccio funzionale ed è anche possibile usarlo anche in maniera imperativa.
E' un linguaggio C-like da un punto di vista sintattico, prende alcune delle sue caratteristiche anche da Java pur essendovi parecchie differenze (con buona pace del comparto marketing di Netscape)
Può nativamente lavorare usando UNICODE.
Gestisce le espressioni regolari. Chi ci ha lavorato sa quanto questo aspetto sia comodo.
è leggero, non si porta dietro megabytes di librerie, run time ecc... Il suo funzionamento è garantito dal client nel quale l'applicazione viene fatta girare.
è gratuito e sostanzialmente non ha padroni. E' standardizzato a livello internazionale. Non è una cosa secondaria....