DEV Community

Francisco Zanfranceschi
Francisco Zanfranceschi

Posted on

[Conceito] - Funções Puras vs Determinísticas

Conteúdo original em https://twitter.com/zanfranceschi/status/1587928641291227136


Ei dev,

Uns dias atrás, vi alguns comentários por aqui sobre a diferença de FUNÇÃO PURA e FUNÇÃO DETERMINÍSTICA.

São a mesma coisa? Você sabe definir esses dois conceitos?

cc @sseraphini

bcc @otaviolemos @coproduto

Image


FUNÇÃO DETERMINÍSTICA:

É uma função que, dada certa entrada, SEMPRE vai produzir o mesmo resultado. Simples assim.

Image


Antes de definir função pura, é necessário entender o que é EFEITO COLATERAL ("side effect" in english).

EFEITO COLATERAL, em ciências da computação, é alguma mudança (efeito) observável fora (colateral) do escopo ou ambiente da execução de um programa.


Ou seja, por exemplo, qualquer operação de I/O (rede, arquivo, stdin, stdout, etc.) causa um efeito colateral em um programa. Ler a data/hora do sistema, um número aleatório, modificar ou ler uma variável global também são considerados efeitos colaterais, blz?


É muito comum a gente ver a definição de efeito colateral como algo que CAUSA uma mudança externa da perspectiva de quem executa. Mas é válido a gente pensar também da perspectiva de quem SOFRE com a mudança (leitura dum valor aleatório, p.ex.). Suave?


Então vamos lá...

FUNÇÃO PURA:

É uma função DETERMINÍSTICA que NÃO CAUSA (OU SOFRE COM) EFEITOS COLATERAIS.

Image


"Pô, mas vc colocou o mesmo exemplo da função determinística, seu baiter safado?!?!" 🤭

Sim! Uma função pura é determinística e sem efeitos colaterais, mas uma função determinística PODE não ser pura. Ou seja, ela PODE causar ou sofrer com efeitos colaterais.


Olha esse outro exemplo de uma função determinística. Ela sempre vai retornar o mesmo resultado dadas as mesmas entradas, mas escrever no stdout é considerado um efeito colateral, pois altera um estado externo.

Image


Uma informação legal:

Uma forma de validar a pureza duma função é verificando se ela é transparente referencialmente. Se for, é pura.

Dá uma olhada nessa thread se tiver dúvida sobre o que é transparência referencial.

https://twitter.com/zanfranceschi/status/1586379168719073281


Resumindo todo esse rolê:

  • Função determinística sempre retorna o mesmo resultado dadas as mesmas entradas, mas ela PODE causar ou sofrer com efeitos colaterais.

  • Função pura é uma função determinística SEM efeitos colaterais ─ é uma função referencialmente transparente.


É isso!

Queria mandar um abraço especial ao @otaviolemos e ao @coproduto pela discussão inicial sobre o assunto! 💕

E obrigado a você também que leu até aqui!

Bjs e abraços. 😗 🤗

Top comments (0)