Variabili locali e globali
Ad ogni variabile è associato un concetto di visibilità o scope, ossia l'ambito del codice in cui la
variabile è visibile ed utilizzabile.
In generale, una variabile dichiarata all'interno di una funzione ha una visibilità locale alla
funzione.
Essa, infatti, è utilizzabile dalla riga successiva alla sua dichiarazione, fino alla chiusura
del
blocco di codice (parentesi graffa chiusa) in cui è dichiarata.
Le variabili possono essere anche locali ad un blocco interno ad
una
funzione, ad esempio un blocco di
selezione (if) o un blocco di iterazione (while/do/for).
Vediamo nel dettaglio alcuni esempi attraverso i frammenti di codice Java che seguono.
Nel frammento di codice seguente vediamo alcuni esempi di variabili
locali ad una funzione o ad un
blocco.
public int miaFunzione(int par1, int par2) {
int i = 0;
// la variabile i è locale alla funzione
// quindi è visibile da questo punto
// fino alla fine di questa funzione
while (i < 1000) {
int c = 0;
// la variabile c è locale al ciclo while
// quindi è visibile da questo punto
// fino alla fine di questo ciclo while
// la variabile i è visibile qui
for (int j = 0; j < i; j++) {
// la variabile j è locale al ciclo for
// quindi è visibile qui
// le variabili i e c sono visibili qui
} // fine visibilità della variabile j
// la variabile j non è visibile qui
} // fine visibilità della variabile c
// la variabile i è visibile qui
// la variabile c non è visibile qui
} // fine visibilità della variabile i
Una variabile globale, invece, è visibile in qualunque funzione all'interno della classe in cui è definita.
Vediamo come si dichiara una variabile globale.
package miopackage;
public class miaClasse {
// esempi di dichiarazione di variabili globali
// notare l'uso della parola chiave static
static int var1;
static float var2;
static boolean var3;
public static void main(String[] args) {
// le variabili globali sono visibili qui
}
public static int miaFunzione1(int par1, float par2) {
// le variabili globali sono visibili qui
}
public static boolean miaFunzione2(double par1, char par2) {
// le variabili globali sono visibili qui
if (var1 < 1000) {
int var2 = 5;
// la definizione della variabile locale var2
// nasconde la variabile globale all'interno
// di questo blocco if, che costituisce
// l'ambito di visibilità della variabile
// locale var2
} // fine visibilità della variabile locale var2
// da questo punto in poi ogni utilizzo della
// variabile var2 farebbe riferimento alla
// variabile globale
}
}
I parametri formali sono visibili all'interno di tutta la funzione, per cui sono assimilabili alle variabili locali della funzione.
All'interno di un blocco/funzione non è possibile dichiarare due volte una variabile con lo stesso nome.
È possibile tuttavia dichiarare una variabile locale con lo stesso nome di una variabile globale.
La variabile locale "nasconde" quella globale fino al punto in cui essa è visibile.