Transparence référentielle Referential transparency
Propriété selon laquelle une expression peut être remplacée par sa valeur sans changer le comportement du programme. add(2,3) peut toujours être remplacé par 5. Fondement de la programmation fonctionnelle et de l'optimisation par le compilateur.
Elle suppose des fonctions pures : aucun effet de bord, une sortie déterministe pour une entrée donnée. Elle est brisée par la mutation d'état global, les E/S, l'aléatoire, l'heure courante. Les gains : un raisonnement plus simple (modèle de substitution), une mémoïsation sans risque, un compilateur libre de réordonner et d'inliner agressivement, une parallélisation triviale (pas d'état partagé).
Haskell l'impose en isolant les E/S dans la monade IO. Aujourd'hui, les composants React devraient eux aussi être référentiellement transparents (mêmes props → même rendu) pour que le memo et le rendu concurrent fonctionnent. À l'opposé : le code impératif à base de mutation ne l'est pas.