Argomenti trattati: caratteristiche principali del linguaggio JavaScript.
JavaScript nasce originariamente con il nome di "LiveScript" e viene sviluppato da Netscape come "potenziamento" del semplice codice HTML; grazie ad esso era finalmente possibile alleggerire il lavoro di elaborazione dati lato server, delegando alcuni semplici compiti come il controllo dei dati personali dei moduli da inviare al server, agli script interpretati direttamente dal browser dell'utente. Un altro degli scopi di "LiveScript" era l'aggiunta di effetti grafici alle normali pagine Web di cui il codice HTML risultava privo. Successivamente, con l'affermarsi sul Web del linguaggio Java, Netscape, unitamente a Sun Microsystem, creatrice di Java, decise di puntare alla definizione di un linguaggio di scripting con la stessa sintassi fondamentale di Java, che permettesse agli sviluppatori Web la scrittura di pratici script per lo sviluppo di una reale architettura lato client. La lacuna che la mancanza di un linguaggio di alto livello rappresentava per il Web veniva così ad essere colmata. Di JavaScript esiste anche l'implementazione della Microsoft, ribattezzata JScript, la quale differisce solo di poco dalla versione originale. Tuttavia entrambe le versioni aderiscono allo standard ECMA, pur continuando ad avere delle proprie peculiarità che devono essere tenute presenti per permettere a tutti gli utenti di visualizzare correttamente le pagine per le quali è stato scritto il codice.
Per definire JavaScript bisogna partire da almeno tre caratteristiche fondamentali: si tratta di un linguaggio interpretato, loosely typed ovvero scarsamente tipizzato e basato sugli oggetti. Esaminiamo ora nei dettagli il significato di queste tre definizioni.
Per linguaggio interpretato si intende dire che il codice JavaScript, a differenza di altri linguaggi di programmazione completi, può essere eseguito solamente tramite l'utilizzo di un programma detto interprete; tale programma, nel caso di JavaScript, è lo stesso browser che permette di visitare le normali pagine HTML dei siti Internet, cioè programmi come Internet Explorer, Netscape Navigator, Opera e molti altri. Mentre un vero linguaggio di programmazione viene compilato, cioè tradotto in codice binario direttamente eseguibile dal processore, un linguaggio interpretato viene processato riga per riga dall'interprete, che provvederà poi ad eseguire le istruzioni opportunamente tradotte in codifica binaria. Questo approccio ha i suoi pro e contro; in primo luogo, l'esecuzione di un programma interpretato o script è sicuramente piú lenta rispetto a quella di un programma direttamente eseguibile. Inoltre, la presenza di piú interpreti per uno stesso linguaggio, comporta inevitabilmente una considerevole differenza di implementazione del linguaggio stesso, cosicché quello che viene correttamente interpretato da un browser può non essere valido per un altro. La grande concorrenza tra Explorer e Navigator è la conseguenza più evidente di questo problema, che spesso costringe gli sviluppatori Web a notevoli sforzi in fase di progettazione per assicurarsi che i propri siti risultino fruibili da parte di tutti o almeno della grande maggioranza degli utenti. Il vantaggio più evidente consiste invece nel fatto che l'aggiornamento di un codice interpretato è praticamente immediato, essendo solo necessario modificare lo script e ricaricare nel browser la pagina che lo contiene.
JavaScript è dunque un linguaggio lato client, perché quando il terminale client si connette ad una pagina web richiede dei servizi ad una macchina, definita server, con la quale comunica attraverso dei protocolli di rete. Il server può eseguire una serie di azioni in risposta alle richieste effettuate dal client: è però importante ricordare che lo script JavaScript è eseguito dal browser del client e non dalla macchina server.
Per linguaggio scarsamente tipizzato si intende, invece, quella caratteristica che permette a JavaScript e in genere a tutti i linguaggi di scripting, di omettere la descrizione del tipo di una variabile in fase di dichiarazione. Per chi non avesse familiarità con la programmazione, ci si limiterà qui a dire che una variabile è un'area di memoria riservata dal programmatore per l'archiviazione di dati ed identificata da un nome. Per una trattazione esauriente dell'argomento si rimanda al capitolo sulle variabili. Mentre in un linguaggio fortemente tipizzato o strongly typed come C, C++, o Java, è obbligatorio dichiarare il tipo di appartenenza di una variabile, in JavaScript, questo, pur essendo possibile, è facoltativo. Da ciò deriva una grande flessibilità in fase di scrittura di codice, in quanto una stessa variabile può addirittura contenere, in successione, sia valori alfanumerici che numerici o di qualunque altro tipo; cosa impensabile in un vero linguaggio di programmazione, dove questa operazione, qualora possibile, richiederebbe complicate conversioni di tipo (type casting).
L'ultima delle caratteristiche piú importanti di JavaScript è quella di essere basato sugli oggetti. Il concetto di oggetto in programmazione è alquanto complesso; per il momento ci limiteremo a dire che in JavaScript tutti gli elementi che compongono una normale pagina HTML come immagini, caselle di testo, pulsanti, collegamenti etc. sono considerati oggetti. La finestra stessa del browser, ad esempio, costituisce l'oggetto Window, che si colloca all'apice di tutti gli altri oggetti JavaScript dal momento che può contenerli tutti al suo interno. Ogni oggetto dispone di proprie caratteristiche peculiari, dette proprietà, di azioni che possono essere compiute su di essi, dette metodi e di eventi ai quali essi sono soggetti. Per esempio, il caricamento di una pagina può essere intercettato dal gestore dell'evento onLoad a cui può essere associata un'istruzione JavaScript. Anche in questo caso, si rimanda, per una più ampia trattazione dell'argomento, al capitolo riguardante gli oggetti. È tuttavia necessario ricordare che JavaScript, a differenza di C++ e Java, non è un linguaggio orientato agli oggetti, in quanto non sono possibili né la definizione di sottoclassi né l'ereditarietà di una classe nei confronti di un'altra già esistente.
I principali utilizzi di JavaScript sono riassumibili come segue:
|
|
|
Questo per quanto riguarda l'utilizzo di JavaScript come strumento di scripting lato client, che è l'àmbito sicuramente più comune; tuttavia è anche possibile utilizzare JavaScript per la scrittura di applicazioni lato server. Tale utilizzo è supportato principalmente da Netscape con l'ambiente SSJS, Server-Side JavaScript, basate sul server Netscape. Anche Microsoft, relativamente alla propria versione del linguaggio, JScript, è in grado di assicurarne il pieno supporto all'interno di ASP, Active Server Pages, sebbene, in quest'ultimo ambiente, gli sviluppatori preferiscano solitamente utilizzare VBScript, altro linguaggio di scripting targato interamente Microsoft e basato sulla sintassi di Visual Basic. JavaScript è inoltre in grado di interagire con altri potenti strumenti di sviluppo software per il Web quali le applet Java e i controlli ActiveX, permettendo così la creazione di applicazioni complesse.
A volte capita che vi sia confusione tra i ruoli che il linguaggio JavaScript e il codice HTML hanno nella creazione delle pagine Web. Spesso, soprattutto in passato, JavaScript veniva considerato come un "abbellimento" del codice HTML ma in realtà si tratta di due cose completamente diverse. Mentre HTML, acronimo di Hypertext Markup Language è un semplice codice per la definizione della struttura delle pagine Web, JavaScript, come detto, è un vero linguaggio di programmazione che consente, al di là dei tanti effetti grafici che è possibile realizzare, la creazione di siti dinamici e interattivi. Tuttavia è vero che l'interazione tra questi due strumenti è totale, in quanto il codice JavaScript può essere incorporato direttamente nel codice HTML delle pagine Web e venire caricato insieme ad esse. Per far questo è necessario ricorrere ad un apposito tag dell'HTML, il tag <script>. Ma vediamo ora, nel primo esempio di questo corso, come avviene in pratica l'incorporamento del linguaggio JavaScript nel codice HTML.
<html>
<title>Prova JavaScript</title>
<head>
<script language="JavaScript">
<!--
alert('Questo è un metodo JavaScript');
-->
</script>
</head>
<body>
Questo è il corpo del documento HTML
</body>
</html>
// Questo semplice esempio mostra come incorporare un'istruzione JavaScript all'interno di una pagina HTML; quando la pagina viene caricata dal browser, non appena viene raggiunta la sezione delimitata dai tag <script> e </script>, una finestra di dialogo che visualizza il messaggio contenuto nel metodo alert viene mostrata all'utente. Successivamente, il caricamento prosegue visualizzando la scritta inclusa nel tag <body>. Da notare che i due tag <!-- e --> sono un accorgimento per fare in modo che vecchi browser che non supportano JavaScript ignorino il codice presente tra di essi.
È utile aggiungere che il codice JavaScript può essere inserito in un punto qualsiasi di una pagina HTML ma che è prassi comune inserirlo all'inizio del documento, tra i tag <head> e </head>, evitando in tal modo la possibilità di incorrere nell'errore di riferirsi, nel resto del documento, a parti di codice non ancora caricate. Naturalmente è possibile richiamare in altri punti del documento porzioni di codice definite all'interno della sezione iniziale. Non vi sono limiti sul numero di tag <script> che possono essere inseriti in un documento HTML. Nel prosieguo del corso si vedranno tutti i possibili modi per includere codice JavaScript nelle pagine Web.
Come già accennato precedentemente, uno dei problemi più frequenti e impegnativi nella progettazione di un sito Web è quello di renderlo pienamente fruibile per il maggior numero di utenti possibile. Questo è valido anche per un semplice sito "statico" in HTML, dal momento che anch'esso si è evoluto notevolmente nel corso degli anni e che molti dei tag più recenti non vengono supportati dai browser più vecchi. È vero a maggior ragione per il linguaggio JavaScript, che ha ormai raggiunto la versione 1.5 e dispone di un gran numero di funzionalità avanzate. Come detto, JavaScript è una creazione di Netscape e di conseguenza la prima versione del linguaggio, la 1.0, veniva supportata esclusivamente dal browser Navigator. Ciononostante, in seguito al grande successo che ha riscosso fin da subito, anche Microsoft si è vista costretta ad assicurare la piena compatibilità tra il suo browser e il linguaggio della casa concorrente. Per riassumere meglio il quadro della compatibilità tra le differenti versioni del linguaggio e quelle dei browser più usati, si osservi la tabella sottostante:
Supporto di JavaScript da parte dei principali browser | |
---|---|
Versione | Browser |
JavaScript 1.0 | Netscape Navigator 2 |
JavaScript 1.1 | Netscape Navigator 3 Internet Explorer 3 Opera 3 |
JavaScript 1.2 | Netscape Navigator 4, 4.04 Internet Explorer 4 |
JavaScript 1.3 | Netscape Navigator 4.05, 4.7 Internet Explorer 5 |
JavaScript 1.4 | HotJava 3.0 Internet Explorer 5.5 |
JavaScript 1.5 | Netscape Navigator 6 Internet Explorer 6 |
Per chi non avesse dimestichezza con lo scripting web, può essere consigliabile leggere la documentazione sull'inserimento del codice nelle pagine html.
Per assicurarsi una buona compatibilità è utile testare il proprio codice JavaScript con il maggior numero di browser possibile prima di metterlo in rete. Inoltre è consigliabile provare più versioni di uno stesso browser e cercare il giusto compromesso tra l'esigenza di utilizzare le funzionalità più avanzate del linguaggio e la necessità di raggiungere il numero di utenti più alto possibile. Ora, dopo questa breve panoramica sulle origini e le caratteristiche fondamentali di JavaScript, è possibile procedere con l'analisi della struttura del linguaggio, dei suoi elementi fondamentali e della sua sintassi.