Transparence référentielle

Définition - Que signifie la transparence référentielle?

La transparence référentielle est une propriété d'une partie spécifique d'un programme ou d'un langage de programmation, en particulier les langages de programmation fonctionnels comme Haskell et R. Une expression dans un programme est dite référentiellement transparente si elle peut être remplacée par sa valeur et le comportement résultant est le même qu'avant le changement. Cela signifie que le comportement du programme n'est pas modifié, que l'entrée utilisée soit une référence ou une valeur réelle vers laquelle pointe la référence.

Definir Tech explique la transparence référentielle

La transparence référentielle a ses racines dans la philosophie analytique, qui est une branche de la philosophie qui étudie les constructions, les arguments et les énoncés du langage naturel basés sur les méthodes des mathématiques et de la logique et a peu à voir avec la programmation, bien qu'elle ait été adoptée par les informaticiens.

Le concept est simple, le «référent», la chose à laquelle une expression se réfère, peut être utilisé pour remplacer le «référent» sans changer le sens de l'expression. Par exemple, la déclaration «Le père de Luke est un homme pervers», «Le père de Luke» fait référence à «Dark Vador» dans la tradition de Star Wars. L'énoncé est donc transparent sur le plan référentiel puisque «le père de Luke» peut être remplacé à tout moment par «Darth Vader» et l'énoncé ne changerait pas de sens. Cependant, dans la déclaration "le public ne savait pas jusqu'à ce que 'The Empire Strikes Back' que le père de Luke est en fait Dark Vador" n'est pas une expression référentiellement transparente puisque si "le père de Luke" est remplacé par "Dark Vador", l'expression devient "le Le public ne savait pas avant «L'Empire contre-attaque» que Dark Vador était en fait Dark Vador, «ce qui a une signification entièrement différente.

En ce qui concerne la programmation, le concept est à première vue le même, mais de nombreux philosophes ne sont pas d'accord pour dire que le concept est bien implémenté ou bien repris dans les langages de programmation. Mais en programmation générale, cela signifie simplement qu'une expression peut être remplacée par sa valeur résultante sans avoir d'effet sur le comportement du programme. Par exemple, la fonction plusOne (x) ajoute simplement un à la valeur de x, donc si nous savons que x = 5, nous pouvons remplacer en toute sécurité la fonction par la valeur 6 dans une expression qui donne le même comportement lors de l'utilisation de plusOne (X). Mais s'il y a une variable externe dans l'expression qui est contrôlée extérieurement, disons dans la fonction plusY (x) où Y dans la fonction est contrôlée extérieurement, le comportement résultant peut ne pas être le même - dans ce cas, ce n'est pas un référentiel transparent expression.