Leggo ovunque che la trasparenza referenziale e gli effetti collaterali si escludono a vicenda per tutte le funzioni, tuttavia, per quanto riguarda il caso in cui una funzione modifica uno stato che non ha alcun effetto sui suoi output. Ad esempio:
global_variable = 0
def foo(a,b):
global_variable += 2
return a + b
# Other code ...
Ora, se chiami questa funzione, sembra che si adatti alla definizione standard di trasparenza referenziale mentre cambia anche stato e quindi ha effetti collaterali.
Con questo in mente, mi chiedo, frainteso la trasparenza referenziale o persino l'idea di un effetto collaterale? È corretto dire che la funzione foo è sia referenzialmente trasparente che ha effetti collaterali?
In una certa misura, ritengo che sia controproducente estendere la definizione di trasparenza referenziale alla condizione che gli effetti collaterali senza alcun effetto sul valore di ritorno di una funzione escludano ancora le funzioni dall'essere considerate referenzialmente trasparenti.