Variabili globali e locali
Si dice che le variabili sono globali quando vi si può fare riferimento da qualunque modulo del programma; si dice invece che sono locali quando sono utilizzabili solo all’interno di un modulo (e dei suoi sottomoduli).
Le variabili globali sono allocate per tutta la durata del programma, cioè sono disponibili durante tutta l’esecuzione del programma.
Le variabili locali vengono allocate solo all’ingresso del modulo e deallocate all’uscita.
Le variabili globali sono memorizzate in locazioni della memoria, nell’area dati del programma.
Le variabili locali sono memorizzate nello stack.
Un modulo che modifica una variabile globale produce un effetto collaterale o side effect.
I side effect sono difficili da controllare e sono spesso causa di errori logici nei programmi.
Normalmente è possibile definire variabili locali ad un modulo e scambiare dati tra il modulo chiamante e il modulo chiamato tramite una lista di variabili (parametri) messe in comune.
Ambito di visibilità degli identificatori (scope)
Ogni elemento (qualsiasi risorsa: costanti, variabili o moduli) ha un suo campo di validità (ambito di visibilità o scope) in cui può essere usato.
Le regole di visibilità sono i criteri che definiscono il campo di validità di ciascun elemento.
In genere valgono le seguenti regole:
-
le variabili globali definite nel programma principale sono accessibili sia al programma principale che a ciascuno dei moduli; è cioè possibile farvi riferimento in qualsiasi modulo del programma;
-
le variabili definite all’interno di un modulo sono locali al modulo e non possono essere utilizzate negli altri moduli o nel programma principale; non esistono al di fuori del modulo in cui sono definite.
In moduli diversi possono essere definite variabili con lo stesso nome (anche di tipo diverso) senza problemi poiché si tratta a tutti gli effetti di variabili diverse.
Un caso particolare che si può verificare è quello in cui variabili con lo stesso nome sono definite nel programma principale e in un modulo; anche questa situazione non causa alcun conflitto: nel modulo è valida solo la definizione locale; la variabile locale, all’interno del modulo, impedisce la visibilità della variabile globale (shadowing).