In informatica e in particolare in programmazione, lo shadowing è la regola di visibilità secondo la quale una variabile locale “nasconde”, all'interno di un blocco, una variabile con lo stesso nome definita nel blocco superiore.

I programmi possono essere strutturati in blocchi, e i blocchi possono essere tra loro annidati (contenuti uno nell'altro). Ciascun blocco può contenere delle dichiarazioni di variabili, definite tramite i propri identificatori. Se una variabile di un blocco più interno ha lo stesso nome (stesso identificatore) di una variabile in un blocco più esterno, quest'ultima viene tenuta "nascosta" dall'omonima variabile del blocco più interno fino a quando questo non ha terminato la propria esecuzione.

Si veda il seguente esempio scritto in pseudocodice:

 1  <begin blocco 1>
 2      var x←11               /* qui la variabile x vale 11 */
 3      <begin blocco 1.1>
 4          var x←22         /* qui la variabile x vale 22 */
 5          var x←(x + 1)      /* qui la variabile x vale 23 */
 6          <begin blocco 1.1.1>
 7              var x←33     /* qui la variabile x vale 33 */
 8          <end blocco 1.1.1>
 9          stampa x           /* qui la variabile x vale 23 */
10      <end blocco 1.1>
11      stampa x               /* qui la variabile x vale 11 */
12  <end blocco 1>

Tutte le variabili dei 3 blocchi hanno lo stesso nome (stesso identificatore), ovvero "x". La variabile definita nel blocco più esterno (blocco 1) ha valore 11. Appena viene creato il blocco 1.1, quando al suo interno viene definita una nuova variabile "x" (variabile locale rispetto al blocco 1.1) il valore della variabile x esterna appartenente al blocco 1 viene "offuscato" dal valore 22 della nuova variabile locale, secondo la regola dello shadowing. Ecco, quindi, che x assume il valore 22 in riga 4 e il valore 23 in riga 5. Il valore della variabile x del blocco 1, però, rimane 11, in quanto i cambiamenti vengono effettuati unicamente sulla variabile interna al blocco 1.1. Con la stessa regola dello shadowing, nel blocco 1.1.1 una nuova variabile locale con lo stesso identificatore "x" va ad offuscare le variabili "x" più esterne. In riga 7, il valore 33 è riferito alla variabile locale del blocco 1.1.1. In riga 9, la regola dello shadowing fa in modo che x assuma il valore 23, perché è la "x" interna al blocco 1.1 (il blocco 1.1.1 è stato chiuso alla riga precedente). Per concludere, in riga 11 viene stampato il valore 11, perché riferito alla x più esterna, ovvero quella creata nel blocco 1.

Bibliografia modifica

  • H. M. Deitel; P. J. Deitel. Java Fondamenti di programmazione. Milano, Apogeo, 2005. ISBN 88-503-2388-3.

Voci correlate modifica

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica