Trasparenza referenziale

Da Wikipedia, l'enciclopedia libera.

In informatica, si definisce trasparente referenzialmente una funzione che non ha effetti collaterali e che quando riceve lo stesso parametro in input, restituisce sempre lo stesso valore.

Mentre in matematica tutte le funzioni sono referenzialmente trasparenti, in programmazione non è così. Per esempio, si consideri una funzione che non accetta parametri e ritorna l'input di una tastiera. Una chiamata a questa funzione - spesso chiamata GetInput() - restituisce un valore che dipende solo dal tasto che l'utente sta premendo, e quindi più chiamate alla stessa funzione, tutte con lo stesso parametro (in questo caso un parametro "vuoto"), possono rendere valori differenti.

Un altro esempio, meno evidente ma molto significativo, è quello di una funzione che usa una variabile globale (cioè accessibile da tutta l'applicazione) come appoggio per calcolare il valore da restituire. Poiché questa variabile non è passata come parametro fisso, ma può invece essere modificata durante la chiamata, i valori restituiti dalla funzione possono essere diversi anche se tutti i parametri passati sono uguali. Da notare, tuttavia, che quando si adotta lo stile della pura programmazione funzionale anche una funzione che usa variabili globali può essere referenzialmente trasparente, in quanto in questo tipo di programmazione non è consentito modificare il valore di tali variabili.

L'uso della trasparenza referenziale ha il grande vantaggio di permettere al programmatore di poter contare su un comportamento univoco delle funzioni che implementa, protette da altre azioni esterne, a priori non sempre prevedibili. Questo aiuta molto nel processo di testing e debug, semplifica l'implementazione di algoritmi, rende più facili la modifica e l'ottimizzazione dei programmi senza cambiarne radicalmente la struttura per mezzo di un processo chiamato memoizzazione.

Alcuni linguaggi di programmazione utilizzano soltanto funzioni di questo tipo.

La trasparenza referenziale tuttavia può comportare, come effetto collaterale indesiderato, che non è possibile, quando la si applica, distinguere fra il riferimento ad un'"entità" e l'entità stessa, distinzione che, invece, è facile ottenere utilizzando le normali tecniche di programmazione.

Strumenti personali