Transparência referencial

Definição - O que significa Transparência Referencial?

Transparência referencial é uma propriedade de uma parte específica de um programa ou linguagem de programação, especialmente linguagens de programação funcionais como Haskell e R. Diz-se que uma expressão em um programa é referencialmente transparente se puder ser substituída por seu valor e o comportamento resultante for o mesmo que antes da mudança. Isso significa que o comportamento do programa não é alterado se a entrada usada for uma referência ou um valor real para o qual a referência está apontando.

Definirtec explica Transparência Referencial

A transparência referencial tem suas raízes na filosofia analítica, que é um ramo da filosofia que estuda construções, argumentos e afirmações da linguagem natural com base nos métodos da matemática e da lógica e tem pouco a ver com programação, embora tenha sido adotada por cientistas da computação.

O conceito é simples, o "referente", aquilo a que uma expressão se refere, pode ser usado para substituir o "referenciador" sem alterar o significado da expressão. Por exemplo, a declaração "O pai de Luke é um homem mau", "O pai de Luke" faz referência a "Darth Vader" na tradição de Guerra nas Estrelas. Portanto, a declaração é referencialmente transparente, uma vez que "o pai de Luke" pode ser substituído a qualquer momento por "Darth Vader" e o significado da declaração não muda. No entanto, na declaração "o público não sabia até 'The Empire Strikes Back' que o pai de Luke é na verdade Darth Vader" não é uma expressão referencialmente transparente, pois se "o pai de Luke" for substituído por "Darth Vader", a expressão se torna "o o público não sabia até 'The Empire Strikes Back' que Darth Vader é na verdade Darth Vader ", que tem um significado totalmente diferente.

Em relação à programação, o conceito é à primeira vista o mesmo, mas muitos filósofos discordam que o conceito seja bem implementado ou transportado em linguagens de programação. Mas, na programação geral, isso significa simplesmente que uma expressão pode ser substituída por seu valor resultante sem afetar o comportamento do programa. Por exemplo, a função plusOne (x) simplesmente adiciona um a qualquer valor de x, então, se sabemos que x = 5, podemos substituir com segurança a função pelo valor 6 em uma expressão que produz o mesmo comportamento ao usar plusOne (x). Mas se houver uma variável externa dentro da expressão que é controlada externamente, digamos na função plusY (x) onde Y dentro da função é controlada externamente, o comportamento resultante pode não ser o mesmo - neste caso, este não é um referencialmente transparente expressão.