Argomenti trattati: dichiarare ed assegnare un valore ad una variabile, parole chiave undefined e null, scope di una variabile.
Nella pagina introduttiva si è già avuto modo di accennare alle variabili, definendole come aree di memoria riservate dal programmatore per l'archiviazione di dati. Possiamo pensare ad esse come a scatole in cui vengono immessi dei valori, dove sarà poi possibile recuperarli, modificarli o eliminarli. La gestione delle variabili è basilare per poter programmare; senza il loro utilizzo anche script molto semplici risulterebbero, se non impossibili, certamente di ardua realizzazione. Vediamo ora in che modo è possibile, nel linguaggio JavaScript, l'archiviazione di dati mediante le variabili. Innanzi tutto è utile precisare che tutte le variabili vengono memorizzate all'interno della memoria RAM, (Random Access Memory o memoria ad accesso casuale), dove ognuna di esse viene contrassegnata da un indirizzo numerico espresso nel sistema esadecimale. In linguaggi di alto livello come JavaScript, non è importante che il programmatore conosca tale indirizzo, in quanto la gestione delle variabili in memoria è delegata interamente all'interprete. Al programmatore basta contrassegnare univocamente una variabile mediante l'utilizzo di un nome. L'assegnamento di un valore, sia esso numerico, alfanumerico, booleano etc. avviene attraverso l'utilizzo del segno = che è un operatore di assegnazione. Pertanto, scrivendo x=2, avremo associato il valore 2 ad una variabile di nome x, il cui indirizzo in memoria è identificato da un numero esadecimale. Ogni volta che in uno script si farà riferimento alla variabile x, l'interprete andrà a leggerne il valore in quello stesso indirizzo. Per correttezza, bisognerebbe evitare di pensare a tale operazione in termini di uguaglianza; piuttosto che dire che x è uguale a 2, è piú esatto affermare che alla variabile x viene assegnato il valore di 2. Attraverso le variabili è possibile eseguire un gran numero di operazioni; per esempio, ponendo x=2 e y=4, si potranno utilizzare le due variabili in luogo dei numeri per eseguire operazioni aritmetiche, assegnando il risultato ad una terza variabile z. Si veda l'esempio seguente:
<html>
<title>Utilizzo Variabili</title>
<head>
<script language="JavaScript">
<!--
var x,y,z; //dichiarazione delle variabili utilizzate
x=2; y=4; //inizializzazione delle variabili
z=x+y; //assegnazione alla variabile z del risultato dell'espressione
alert('Il risultato di x+y è '+z);
-->
</script>
</head>
// A questo punto è necessario soffermarci sul codice appena mostrato per chiarire le novità introdotte. Come già accennato precedentemente, la parola chiave var viene utilizzata per la dichiarazione delle variabili. Per dichiarazione si intende la semplice enunciazione delle variabili che si ha intenzione di usare all'interno dello script. Come mostrato dall'esempio, in caso di dichiarazione di più variabili si può utilizzare la virgola come separatore. In fase di dichiarazione è anche possibile assegnare il valore delle variabili; è dunque pienamente accettabile scrivere var x=2;. In tal caso si effettua l'inizializzazione, ossia l'assegnamento del valore, contemporaneamente alla dichiarazione delle variabili. Si noterà, inoltre, come l'operatore + venga utilizzato per un doppio scopo; JavaScript consente, infatti, di utilizzare tale operatore anche per concatenare stringhe di caratteri. Nell'esempio, alla stringa "Il risultato di x+y è " viene concatenato il contenuto della variabile z, nel caso specifico, il numero 6. Della flessibilità dell'operatore + ci occuperemo piú ampiamente nel paragrafo sugli operatori. L'ultima notazione da fare su questo piccolo esempio riguarda l'utilizzo del segno di punto e virgola (;) come delimitatore; esso indica la fine di un'espressione e permette anche di accodare piú di un'espressione sulla stessa riga. Può essere paragonato al punto che termina una frase. A questo punto ci si potrebbe chiedere se sia proprio necessario utilizzare le variabili, che, è bene specificarlo, hanno pur sempre un costo in termini di memoria usata, piuttosto che i numeri veri e propri; nel caso dell'esempio, certamente l'uso delle variabili non è necessario. Se però i numeri da sommare non sono conoscibili a priori, perché magari devono essere indicati dall'utente del programma, ecco che il loro utilizzo diventa indispensabile. Premendo il pulsante qui sotto si avrà una dimostrazione pratica dell'esempio appena esaminato.
Come anticipato nella pagina introduttiva, essendo JavaScript un linguaggio scarsamente tipizzato, in esso è possibile modificare il tipo di dato di una variabile durante l'esecuzione dello script senza che ciò causi problemi. Vediamo in pratica cosa significa, osservando e provando il seguente esempio:
<html>
<title>Modifica del tipo di una Variabile</title>
<head>
<script language="JavaScript">
<!--
var x,y; //dichiarazione delle variabili utilizzate
x=2; //inizializzazione di una variabile numerica
y='stringa di prova'; //inizializzazione di una variabile stringa
alert('x = ' + x); //Visualizzazione del valore di x
alert('y = ' + y); //Visualizzazione del valore di y
x='stringa di prova'; y=2; //scambio di valori tra le due variabili
alert('x = ' + x);
alert('y = ' + y);
-->
</script>
</head>
// Nell'esempio è evidente come ad una stessa variabile x inizializzata prima con un dato di tipo numerico, chiamato in JavaScript numero_Esempio, sia possibile in seguito assegnare un valore di tipo alfanumerico o string, e viceversa. Naturalmente ciò è possibile con tutti i tipi di variabile disponibili in JavaScript, elencati nella tabella sotto:
Tipi di dato delle Variabili | |
---|---|
Tipo | Contenuto |
numero_Esempio | 4, 10.5, -6 |
string | "stringa di prova", '10', " " |
boolean | true, false |
Esistono anche altri due tipi di dato in JavaScript, chiamati function e object ma di essi parleremo piú avanti. In JavaScript le variabili si distinguono, oltre che per il tipo di dati che possono contenere, anche in base alla loro area di validità. In base a questa differenziazione si hanno variabili globali e variabili locali. Questo però è un argomento strettamente legato alla trattazione delle funzioni per cui verrà affrontato in seguito.
In programmazione una costante è un particolare tipo di variabile che non modifica mai il proprio valore durante l'esecuzione del programma. A differenza di altri linguaggi come C++, Visual Basic, VBScript etc. in JavaScript una costante non ha una differenza sostanziale rispetto a una variabile. È, anzi, anch'essa una normale variabile, dichiarata con la parola chiave var e a cui il programmatore assegna un valore che non deve mai cambiare. Però, a differenza dei linguaggi citati, JavaScript non effettua alcun controllo su tale valore; se per sbaglio, il valore della costante dovesse essere modificato durante l'esecuzione dello script, non si riceverebbe alcun messaggio di errore. Dev'essere il programmatore a fare in modo che tale valore non cambi, pena il malfunzionamento dello script stesso.
I letterali sono utilizzati in JavaScript per rappresentare dei valori fissi che possono essere alfabetici o alfanumerici. I letterali si distinguono al loro interno in Interi, Decimali, Booleani e Stringa. Quelli interi comprendono tutti i numeri, positivi e negativi, e possono essere espressi oltre che nel sistema decimale anche in quello ottale ed esadecimale. Per esprimere un numero nel sistema ottale si antepone uno 0 alla cifra desiderata; per fare la stessa cosa nel sistema esadecimale si antepone uno 0x o 0X alla cifra.
Ma vediamo alcuni esempi:
Letterali Interi Decimali: 1230, 458
Letterali Interi Ottali: 072, 0654
Letterali Interi Esadecimali: 0x7b, 0X8e
I letterali in virgola mobile esprimono valori decimali positivi e negativi con parti frazionarie:
Letterali in virgola mobile: 4.55, -23.56
I letterali booleani sono solamente due e sono molto importanti in programmazione; essi esprimono i due valori di true e false che corrispondono alle due cifre fondamentali del sistema binario 1 e 0 su cui, come è noto, si basano i computer per eseguire qualsiasi operazione.
I letterali Stringa sono sempre racchiusi tra apici che possono essere singoli o doppi. Un letterale stringa può contenere anche 0 caratteri ma dev'essere comunque delimitato dagli apici.
Alcuni esempi di letterali stringa:
Due stringhe di caratteri: "questa è una stringa", 'anche questa è una stringa'
Due stringhe vuote: "", ''
Due stringhe che contengono uno spazio: " ", ' '
Per ottenere dei caratteri speciali che sono usati nel linguaggio per scopi precisi o delle funzioni disponibili solo attraverso dei tasti, in JavaScript è possibile anteporre una barra rovesciata \ (backslash) davanti a uno dei cosiddetti codici di escape. Si osservi il seguente elenco:
\b
ottiene un backspace
\f
ottiene un comando di avanzamento
\n
ottiene una nuova riga
\r
ottiene un ritorno a capo
\t
ottiene una tabulazione
\\
ottiene una barra rovesciata
\'
ottiene un apice singolo
\"
ottiene un apice doppio
Una variabile può avere un valore indefinito. Ad esempio, dichiarare:
var var_indefinita;
vuole dire dichiarare una variabile senza assegnare essa un valore. In questo caso, il valore di var_indefinita sarà undefined, traducibile come non definito.
Come si avrà modo di approfondire nel corso della trattazione del linguaggio, JavaScript è basato sugli oggetti e anche per un oggetto esiste la possibilità che sia indefinito, nel quale caso si utilizza la parola chiave null. Una proprietà di un oggetto non definita risulterà undefined.
In entrambi i casi le parole sono riservate nel linguaggio e sono definite come valori primitivi, che possono essere utilizzati nelle espressioni condizionali per testare se un valore o una proprietà di un oggetto è indefinita, oppure se un oggetto è nullo. In questo caso il risultato della condizione sarà false.
Per correttezza si ricorda che non possiamo dichiarare una variabile col nome di undefined o null e che non si devono confondere le espressioni descritte con letterali alfanumerici, quali ad esempio 'Undefined' o 'NULL', che risulterebbero semplicemente stringhe.
Per chi abbia già confidenza con i linguaggi di programmazione risulterà conosciuto il concetto di area di visibilità di una variabile, anche definito col termine di scope. Fino a che non si dichiara una variabile ovviamente essa non è vista dal codice eseguito.
Quindi sarebbe un errore scrivere:
var v2=1;
v2=v2+v1; // errore! v1 dovrebbe essere dichiarata prima
di essere utilizzata.
var v1=3;
Una variabile dichiarata al di fuori di una funzione è globale, visibile in tutto il codice presente di seguito. Quindi è opzionale scrivere:
var v1=1; //
variabile globale dichiarata all'esterno di una funzione con la parola chiave var
// oppure
v2=2; // variabile globale dichiarata all'esterno di una
funzione anche senza la parola chiave var
Se invece la variabile è dichiarata all'interno di una funzione essa è locale alla funzione e quindi visibile solo nel codice in essa presente.
// quattro variabili globali
var v1=1;
v2=2;
v3=0;
v4=0;
alert('prima della funzione')
function pippo(){
// questa variabile non è la variabile v3 dichiarata fuori dalla funzione, ma è locale alla funzione
pippo
var v3;
// assegno alla variabile locale v3 il valore
della somma delle 2 variabili globali v1 e v2
v3=v1+v2;
// questa variabile è la variabile v4 dichiarata fuori dalla funzione
v4=v3;
alert('dentro la funzione')
alert(v3) // v3 è uguale a 2
alert(v4) // v4 è uguale a 2
}
pippo() // eseguo la funzione pippo
alert('dopo la funzione')
alert(v3) // v3 locale vale ancora zero
alert(v4) // v4 ha cambiato il suo valore all'interno
della funzione: ora vale 2
Il prossimo argomento che andremo a trattare è quello degli operatori.