Ipertesti
Un ipertesto è un insieme di documenti che ha la possibilità di essere consultato in modo non sequenziale, passando da un documento all’altro attraverso collegamenti (link) realizzati tramite parole o immagini, sui quali occorre fare click con il mouse.
Gli ipertesti hanno raggiunto una grande diffusione grazie allo sviluppo della
rete Internet che ha comportato in pochi anni l’aumento dei siti web raggiungibili
e della quantità di informazioni disponibili.
Gli ipertesti memorizzati su server Internet possono essere letti utilizzando
opportuni programmi chiamati web browser come Chrome, Firefox, Safari, etc..
Il linguaggio utilizzato per scrivere ipertesti è l’HTML (HyperText Markup
Language ).
Come dice la sigla, HTML è un linguaggio di marcatura, cioè, utilizza dei
contrassegni (tag) per la formare il documento. La cosa interessante è che
i documenti HTML sono dei normali testi di caratteri e di conseguenza sono
visibili e modificabili con qualunque programma per il trattamento dei testi
dal word processor fino al semplice editor come il blocco Note di Windows.
I testi scritti in HTML si distinguono dai normali file con estensione .txt
tramite l'estensione .html o .htm.
Questi documenti non sono altro che dei normali file di caratteri ASCII
all'interno dei quali vengono aggiunti i codici di formazione della pagina
(tag) consistenti in sequenze di caratteri propri del linguaggio HTML che
non fanno parte del testo normale e che permettono di realizzare gli elementi
caratteristici di un ipertesto.
In ogni caso, un normale testo scritto col Noteblock di Windows senza codici
HTML è accettato e trascritto così com’è da un interprete HTML cioè da un
qualsiasi browser web.
Per quanto detto, si deduce che l' HTML è un linguaggio di marcatura che tramite opportuni "tag" marcatori consente di formare un documento che poi può essere interpretato da un browser web. La tipica struttura di un documento HTML è qui sotto riportata
L'istruzione <!DOCTYPE html > rappresenta la dichiarazione del tipo di documento (DTD = Document Type Declaration ) poi tra il tag di apertura <html> e quello di chiusura </html> si vedono le due sezioni dell'intestazione (head) ed del corpo (body).
L'intestazione contiene informazioni sul documento ed il corpo contiene
il documento stesso.
I tag sono dunque istruzioni racchiuse all'interno di parentesi angolari
(< >).
Esistono tanti tipi di tag; ad esempio nella sezione head dovrebbe sempre
essere presente un tag <title>..</title> per
dichiarare il titolo della pagina.
Per segnalare ai motori di ricerca le parole chiave associate alla pagina si usa il tag <meta name="keywords" content="matematica, geometria,statistica"> ma ne esistono molti altri.
Nel corpo della pagina (body) tra i tag più importanti troviamo il tag <p> ..</p> usato per definire un paragrafo di testo, il tag <br> per andare a capo di una riga oppure il tag <div> .. </div> per definire un generico blocco di elementi HTML.
Una cosa importante da ricordare è che i tag possono essere dotati di un attributo univoco id che può identificare i diversi elementi all'interno della pagina. Scritture come
<div id="alfa"> .. </div>
oppure
<p id="beta"> .. </p>
permettono di riferirsi a precisi elementi del documento.
La sintassi di questo linguaggio è molto tollerante, quando mancano i tag
che dovrebbero esserci è il browser stesso che li ricostruisce.
Una tipica pagina scritta in HTML potrebbe essere anche strutturata nel seguente modo:
come si vede mancano completamente il tag di apertura <html> i tag <head>..</head> e <title>..</title> ma questo non impedisce alla pagina di funzionare.
JavaScript
Non essendo HTML in grado di elaborare delle logiche di programmazione (variabili, costrutti, cicli, etc..) la Netscape introdusse nel 1995 all'interno del suo browser Navigator un linguaggio chiamato JavaScript (più brevemente JS) il cui nome faceva in qualche modo riferimento a Java creato nel 1992 dalla Sun MicroSystem, anche se tra i due linguaggi non vi era alcun nesso. L'unica cosa che vi era in comune era la sintassi che era molto simile anche a quella del linguaggio C (standard ECMA).
Rispetto al C e a Java il linguaggio JS per funzionare non richiedeva di scaricare ed utilizzare un compilatore, ma era sufficiente un browser ed un editor di testi.
Per i nostri attuali scopi, l'intenzione è quella di fare un uso modesto di HTML che consideriamo semplicemente un interfaccia di input/output per i nostri scritti. Col Blocco Note di Windows, scriviamo, dunque, le seguenti righe di codice :
L'oggetto del nostro interesse è quanto viene racchiuso tra i due tag <script>
e </script> tra questi due marcatori
viene racchiuso il codice JS.
Lo script viene eseguito appena il browser legge l'HTML; la lettura avviene,
ovviamente, dall'alto verso il basso, quindi dopo aver stampato le due righe
di testo indicate, viene eseguito il codice JavaScript; nello specifico
il nostro codice stamperà a video una stringa di saluto.
Da questo primo esperimento si conclude che JS è in grado sicuramente di
eseguire degli output, ma non sappiamo ancora nulla sulle sue eventuali
capacità di elaborazione.
Per questo, il nostro approccio sarà molto simile a quello già visto per
gli altri linguaggi di programmazione.
In questa pagina viene scritta una stringa di descrizione e poi si va a
capo (<br>) viene poi impostato un tag <div
id="R" > </div> ma sarebbe uguale usare un tag <p
id="R" > </p>.
Inoltre sono stati omessi i doppi apici attorno all'identificatore R anche
se è consigliabile metterli.
Segue l'algoritmo vero e proprio con la dichiarazione di una costante k=3
e di una variabile var x=5 entrambe
terminate dal punto e virgola.
L'output costituito dalla moltiplicazione x*k viene
indirizzato sull'elemento HTML che abbiamo chiamato R sfruttando la sua
proprietà innerHTML.
E' ora evidente come qualsiasi tag caratterizzato da un identificatore univoco
id possa essere usato per esternalizzare il valore di una variabile JS.
Esiste una ulteriore possibilità per generare un output che è quello di
usare la console di JS, ma per fare questo bisogna attivarla con la combinazione
di tasti CTRL-SHIFT-J su Chrome, CTRL-SHIFT-K su Firefox mentre su Safari bisogna premere
CMD+ALT+J .
Per effetuare l'output verso la console avremmo usato l'istruzione:
console.log(x*k);
Bisogna ricordare che la console è l'unico strumento a disposizione dei compilatori C e Java per generare l'output; per costruire delle applicazioni stand-alone in questi linguaggi bisogna fare uso di opportune librerie grafiche che ovviamente moltiplicano il numero di righe di codice associate all'algoritmo principale.
Nel nostro caso, la filosofia è quella di usare HTML come interfaccia grafica
e di delegare a JS la parte algoritmica.
Bisogna solo rimarcare due fatti importanti:
I) La sintassi HTML non è case-sensitive.
II) La sintassi JavaScript è case-sensitive.
Come dire, per HTML <DIV> e <div>
è la stessa cosa.
Per JS var x=5
e var X=5 rappresenta la dichiarazione di due variabili
diverse.
Riassumendo: JavaScript è un linguaggio di programmazione composto da righe
di testo che vengono inserite all'interno di pagine web e memorizzate il
file con estensione .htm.
Quando si vuole visualizzare questo tipo di pagine, il browser restituisce
il contenuto completo del documento contenente sia i tag HTML che gli scritti
JavaScript.
Gli algoritmi JS non sono compilati come nel caso del linguaggio C ma interpretati
dal browser.
JavaScript ha una sintassi simile ai linguaggi di programmazione Java e C se si considerano le espressioni, gli operatori e le strutture di controllo.
I tipi di dati riconosciuti sono
• i numeri sia interi che quelli con la virgola (usare però il punto);
• le stringhe di caratteri;
• i valori booleani true e false;
• gli oggetti;
• i due valori speciali null e undefined.
Operatori aritmetici
operatore | simbolo | esempio |
addizione | + | a+b |
sottrazione | - | a-b |
moltiplicazione | * | a*b |
divisione | / | a/b |
resto | % | a%b |
Un esempio potrebbe essere il seguente:
Notiamo come l'output sia un ibrido tra stringhe (racchiuse tra singoli
apici) e risultati numerici (racchiusi tra parentesi) espresso in una forma
molto simile a quella utilizzata in Java per l'istruzione System.out.println()
.
Vi sono già degli operatori di assegnazione come =
e += quest'ultimo in particolare non fa che aggiungere
all'output una nuova riga che in HTML verrà interrotta con il marcatore
<br> con un ritorno a capo.
La cosa più macroscopica è che l'operazione di divisione tra i due valori
interi restituisce il loro quoziente preciso in virgola mobile; per ottenere
il quoziente tra i due numeri senza i decimali siamo costretti ad usare
l'istruzione parseInt() che converte un generico
valore in un numero intero; come si può pensare esiste anche un'istruzione
parseFloat() che restituisce il valore in virgola
mobile dell'argomento che gli viene passato.
L'operatore % che restituisce l'eventuale resto della
divisione tra due interi mantiene il suo comportamento invariato come in
C ed in Java.
Operatori relazionali
operatore | simbolo | esempio |
maggiore di | > | a>b |
minore di | < | a<b |
maggiore o uguale di | >= | a>=b |
minore o uguale di |
<= | a<=b |
diverso da | != | a!=b |
uguale a | == | a==b |
Sono operatori usati quando si devono attuare delle operazioni di test che restituiscono semplicemente dei valori logici true (vero =1) o false (falso=0).
Operatori logici
Per le operazioni che si possono applicare ai valori booleani esistono
sempre i tre operatori logici AND, OR e NOT.
Se pensiamo che le variabili booleane possono assumere solo valori del tipo
a=true (=1), b=false (=0) e che l'operazione logica di AND corrisponde alla
moltiplicazione, quella di OR all'addizione e quella NOT alla commutazione
della variabile stessa; è già possibile fare delle constatazioni.
operatore | simbolo | esempio |
AND | && | a&&b |
OR | || | a||b |
NOT | ! | !a |
Operatori di assegnazione
operatore | simbolo | esempio |
assegnazione | = | a=b |
incremento e assegnazione | ++ | a++ |
decremento e assegnazione | -- | a-- |
addizione e assegnazione | += | a+=b |
sottrazione e assegnazione | -= | a-=b |
prodotto e assegnazione | *= | a*=b |
divisione e assegnazione | /= | a/=b |
Nell'esempio qui sotto riportato, la variabile x viene inizializzata a zero x=0 poi viene incrementata di 1 con l'istruzione x++ poi viene incrementata di y che vale 5.
Variabili
JS non esegue un controllo rigido sui tipi di dato come nel caso di C
e Java; quando si dichiara una variabile non è necessario specificarne il
tipo. La dichiarazione di variabile viene fatta specificandone il nome (identificatore)
ed assegnandogli un valore, inoltre, durante l'esecuzione dello script,
alla stessa variabile possono essere associati valori di tipo diverso.
Per questo bisogna usare molta cautela in modo particolare quando si usano
le stringhe con il loro operatore di concatenazione '+' dato che questo
ha la priorità sulle operazioni aritmetiche.
In generale, bisogna fare attenzione, quando si usano stringhe, numeri ed
operatori aritmetici.
Nella prima espressione si ha un semplice concatenamento di stringhe effettuato
con l'operatore '+'.
Nella seconda espressione, rendendosi conto che non si può effettuare una
sottrazione tra una stringa ed un numero, l'interprete JS effettua una conversione
di cast (forzatura del tipo) su '7' che da stringa diventa numero.
Nella terza espressione la presenza della stringa '7' e dell'operatore di
concatenazione '+' costringe l'interprete ad una forzatura di tipo e 1 diventa
una stringa '1' da concatenare a '7'.
Nell'ultima espressione è presente l'operatore (*) per la moltiplicazione,
ma uno dei due operandi non è un numero, cioè è NaN
(Not a Number) e questo sarà il risultato dell'operazione.