Dichiarazione di Variabili e Assegnamento in Javascript
- In JavaScript, le variabili possono essere dichiarate usando
let
econst
, conlet
per variabili mutabili econst
per costanti. - Le variabili dichiarate con
let
possono essere riassegnate, mentre quelle dichiarate conconst
non possono essere modificate dopo la loro inizializzazione. - È una buona pratica inizializzare le variabili al momento della dichiarazione.
- Le variabili di loop possono essere dichiarate all'interno della sintassi del loop stesso, utilizzando
let
oconst
. - Le convenzioni di denominazione per le costanti spesso utilizzano lettere maiuscole per distinguerle dalle variabili.
Dichiarazione e Assegnazione di Variabili
Una delle tecniche più fondamentali della programmazione informatica è l'uso di nomi, o identificatori, per rappresentare valori. Legare un nome a un valore dà un modo per riferirsi a quel valore e usarlo nei programmi che si scrivono. Quando si fa questo, tipicamente si dice che si sta assegnando un valore a una variabile. Il termine "variabile" implica che nuovi valori possono essere assegnati: che il valore associato con la variabile può variare mentre il programma viene eseguito.
Se si assegna permanentemente un valore a un nome, allora si chiama quel nome una costante invece di una variabile.
Prima di poter usare una variabile o costante in un programma JavaScript, si deve dichiararla. In ES6 e successivi, questo viene fatto con le parole chiave let
e const
, che si spiegano di seguito. Prima di ES6, le variabili erano dichiarate con var
, che è più idiosincratico e verrà spiegato nella lezione successiva.
Dichiarazioni con let
e const
Nel JavaScript moderno (ES6 e successivi), le variabili sono dichiarate con la parola chiave let
, in questo modo:
let i;
let somma;
È anche possibile dichiarare più variabili in una singola istruzione let
:
let i, somma;
È una buona pratica di programmazione assegnare un valore iniziale alle variabili quando le si dichiara, quando questo è possibile:
let messaggio = "ciao";
let i = 0, j = 0, k = 0;
// Gli inizializzatori possono usare variabili precedentemente dichiarate
let x = 2, y = x*x;
Se non si specifica un valore iniziale per una variabile con l'istruzione let
, la variabile è dichiarata, ma il suo valore è undefined
fino a quando il codice non le assegna un valore.
Per dichiarare una costante invece di una variabile, si usa const
invece di let
. const
funziona proprio come let
eccetto che si deve inizializzare la costante quando la si dichiara:
// Costante di Hubble (km/s/Mpc)
const H0 = 74;
// Velocità della luce nel vuoto (km/s)
const C = 299792.458;
// Unità Astronomica: distanza dal sole (km)
const AU = 1.496E8;
Come il nome implica, le costanti non possono avere i loro valori cambiati, e qualsiasi tentativo di farlo causa il lancio di un TypeError
.
È una convenzione comune (ma non universale) dichiarare le costanti usando nomi con tutte lettere maiuscole come H0
o HTTP_NOT_FOUND
come modo per distinguerle dalle variabili.
Quando Utilizzare const
Esistono due scuole di pensiero riguardo all'uso della parola chiave const
. Un approccio è quello di utilizzare const
solo per valori che sono fondamentalmente immutabili, come le costanti fisiche mostrate, o i numeri di versione del programma, o sequenze di byte utilizzate per identificare i tipi di file, ad esempio. Un altro approccio riconosce che molte delle cosiddette variabili nel programma in realtà non cambiano mai mentre il programma è in esecuzione. In questo approccio, si dichiara tutto con const
, e poi se si scopre che si vuole effettivamente permettere al valore di variare, si cambia la dichiarazione in let
. Questo può aiutare a prevenire bug escludendo modifiche accidentali a variabili che non si intendeva modificare.
In un approccio, si utilizza const
solo per valori che non devono cambiare. Nell'altro, si utilizza const
per qualsiasi valore che non capita di cambiare. Si preferisce il primo approccio nel codice.
Nelle lezioni future, si imparerà sui comandi di loop for
, for/in
, e for/of
in JavaScript. Ognuno di questi loop include una variabile di loop che riceve un nuovo valore assegnato ad essa ad ogni iterazione del loop. JavaScript permette di dichiarare la variabile di loop come parte della sintassi del loop stesso, e questo è un altro modo comune per utilizzare let
:
for(let i = 0, lunghezza = dati.length; i < lunghezza; i++) console.log(dati[i]);
for(let elemento of dati) console.log(elemento);
for(let proprieta in oggetto) console.log(proprieta);
Può sembrare sorprendente, ma si può anche utilizzare const
per dichiarare le "variabili" di loop per i loop for/in
e for/of
, purché il corpo del loop non riassegni un nuovo valore. In questo caso, la dichiarazione const
sta solo dicendo che il valore è costante per la durata di una iterazione del loop:
for(const elemento of dati) console.log(elemento);
for(const proprieta in oggetto) console.log(proprieta);
Ambito di variabili e costanti
L'ambito di una variabile, chiamato anche scope, è la regione del codice sorgente del programma in cui è definita. Le variabili e costanti dichiarate con let
e const
hanno un ambito di blocco. Questo significa che sono definite solo all'interno del blocco di codice in cui appare l'istruzione let
o const
. Le definizioni di classi e funzioni JavaScript sono blocchi, così come i corpi delle istruzioni if/else
, dei cicli while
, dei cicli for
, e così via. In generale, se una variabile o costante è dichiarata all'interno di un insieme di parentesi graffe, allora quelle parentesi graffe delimitano la regione di codice in cui la variabile o costante è definita (anche se ovviamente non è legale fare riferimento a una variabile o costante dalle righe di codice che vengono eseguite prima dell'istruzione let
o const
che dichiara la variabile). Le variabili e costanti dichiarate come parte di un ciclo for
, for/in
, o for/of
hanno il corpo del ciclo come loro ambito, anche se tecnicamente appaiono al di fuori delle parentesi graffe.
Quando una dichiarazione appare al livello superiore, al di fuori di qualsiasi blocco di codice, si dice che è una variabile o costante globale e ha ambito globale. In Node e nei moduli JavaScript lato client, l'ambito di una variabile globale è il file in cui è definita. Nel JavaScript tradizionale lato client, tuttavia, l'ambito di una variabile globale è il documento HTML in cui è definita. Cioè: se uno <script>
dichiara una variabile o costante globale, quella variabile o costante è definita in tutti gli elementi <script>
in quel documento (o almeno in tutti gli script che vengono eseguiti dopo che l'istruzione let
o const
viene eseguita).
Dichiarazioni ripetute
È un errore di sintassi usare lo stesso nome con più di una dichiarazione let
o const
nello stesso scope. È legale (anche se è una pratica da evitare) dichiarare una nuova variabile con lo stesso nome in uno scope annidato:
const x = 1; // Dichiara x come una costante globale
if (x === 1) {
let x = 2; // All'interno di un blocco x può riferirsi a un valore diverso
console.log(x); // Stampa 2
}
console.log(x); // Stampa 1: siamo tornati nello scope globale ora
let x = 3; // ERRORE! Errore di sintassi nel tentativo di ri-dichiarare x
Dichiarazioni e tipi
Se si è abituati a linguaggi tipizzati staticamente come C o Java, si potrebbe pensare che lo scopo principale delle dichiarazioni di variabili sia specificare il tipo di valori che possono essere assegnati a una variabile. Ma, come si è visto, non c'è alcun tipo associato alle dichiarazioni di variabili di JavaScript. Una variabile JavaScript può contenere un valore di qualsiasi tipo. Ad esempio, è perfettamente legale (ma generalmente uno stile di programmazione scadente) in JavaScript assegnare un numero a una variabile e poi successivamente assegnare una stringa a quella variabile:
let i = 10;
i = "dieci";