Java/Variabili locali
Una variabile è una piccola area di memoria che permette al programma di ricordare i dati usati durante l'esecuzione, e quindi di riutilizzarli senza doverli calcolare ogni volta.
Caratteristiche
modificaEsistono tre tipi di variabili:
- variabili locali
- variabili di istanza (includono le celle degli array)
- variabili statiche
Questi tipi sono esaminate singolarmente nelle sezioni successive. In questa sezione sono spiegate le caratteristiche che hanno in comune.
A tempo di compilazione (ovvero nel testo sorgente del programma), una variabile è caratterizzata da:
- nome: un identificatore
- tipo
- significato: il significato che il valore contenuto nella variabile ha per il programma.
A tempo di esecuzione, a questi si aggiunge anche il valore presente nella variabile. In ogni momento, una variabile o è vuota, o contiene un valore (mai più di uno). Inserire un nuovo valore significa cancellare il valore che c'era prima.
Dichiarazione
modificaConsiste nella indicazione del tipo e del nome della variabile, separati da uno spazio e seguiti da un punto e virgola.
Ad esempio, l'istruzione int indice;
definisce una variabile che può contenere solo valori del tipo int
, e il cui nome è indice
.
La dichiarazione può anche includere un'operazione di assegnazione, nel qual caso si parla di inizializzazione della variabile: ad esempio,
int indice = 10;
equivale a scrivere
int indice; indice = 10;
Le variabili locali sono vuote, a meno che non ci sia una inizializzazione. Invece, le variabili di istanza o statiche sono inizializzate con un valore di default:
0
per i tipi numerici interifalse
perboolean
null
per i tipi riferimento.
Ne consegue che le variabili di istanza e quelle statiche non sono mai vuote.
Lettura
modificaPer leggere il valore contenuto in una variabile se ne scrive il nome. Ad esempio:
int indice = 10; System.out.println(indice);
stampa a video 10
.
Non si può leggere una variabile vuota (vedi sopra), pertanto questo codice non funziona:
int i;
System.out.println(i);
Questo comportamento è diverso da quello che si trova in altri linguaggi, come il C, in cui la variabile viene automaticamente inizializzata ad un valore predefinito o casuale.
Scrittura
modificaPer scrivere un valore nella variabile si usa l'operatore di assegnazione =
.
Attenzione: questo non ha lo stesso significato dell'operatore matematico di uguaglianza. Ad esempio, se si eseguono le istruzioni
a = b; b = c + 1; a = c;
non si avrà nessun errore, perché quelle scritte sono assegnazioni e non equazioni.
Attenzione: non confondere l'operatore di assegnazione =
con l'operatore di confronto ==
Scope
modificaSi chiama scope (o ambito di validità) la regione del codice sorgente del programma in cui la variabile si considera definita. Al di fuori dello scope, la variabile semplicemente non esiste.
Lo scope dipende dal tipo di variabile (vedere di seguito). Saper riconoscere lo scope di una variabile è importante, perché scope diversi possono ospitare variabili con lo stesso nome.
Costanti
modificaSi può vincolare una variabile a contenere un valore prefissato, che non cambierà mai durante l'esecuzione del programma. (In pratica si tratta di una costante.) Per farlo si deve usare il modificatore final
nella dichiarazione della variabile. Il compilatore controllerà il testo del programma, analizzerà tutti i flussi di esecuzione possibili, e verificherà che in nessuno di questi flussi di esecuzione avvenga che la variabile subisce due istruzioni di assegnazione.
Per convenzione, e per rendere il codice più chiaro, le costanti sono tipicamente definite come variabili static final
. Se le convenzioni di nomenclatura sono rispettate, ciò permette di distinguere le costanti a colpo d'occhio. Ovviamente, ciò non è sempre applicabile, ad esempio quando il valore da tenere memorizzato dipende da fattori che dipendono dall'esecuzione del programma e non sono noti a priori.
Convenzioni di nomenclatura
modificaI nomi delle variabili dovrebbero:
- essere abbastanza esplicativi da rendere chiaro il significato che assumono nel programma
- essere in CamelCase, con l'iniziale minuscola; con l'eccezione delle costanti (variabili
static final
), il cui nome dovrebbe essere composto di parole completamente in maiuscolo e separate dagli underscore.
Variabili locali
modificaUna variabile locale è una variabile definita all'interno di un metodo. Solo quel metodo è autorizzato ad accedere alla variabile.
Lo scope della variabile corrisponde al blocco più esterno in cui la variabile è definita.
Variabili di istanza
modificaSono i campi degli oggetti. La vita di una variabile di istanza coincide con quella dell'oggetto a cui appartiene: quindi comincia con la creazione dell'oggetto, e finisce quando l'oggetto viene deallocato.
Variabili statiche
modificaSono le variabili definite in una classe con la parola-chiave static
. Esse appartengono ad una classe e non ai suoi oggetti. La variabile nasce quando la virtual machine carica la classe, e resta in vita finché il ClassLoader della classe non viene deallocato.
Anche le interfacce possono avere variabili statiche.
Note
modifica