Digamos que temos uma função pura normal, como
function add(a, b) {
return a + b
}
E então nós a alteramos para que tenha um efeito colateral
function add(a, b) {
writeToDatabase(Math.random())
return a + b;
}
Até onde eu sei, não é considerada uma função pura, porque muitas vezes ouço as pessoas chamarem funções puras de "funções sem efeitos colaterais". No entanto, ele se comporta como uma função pura na medida em que retornará a mesma saída para as mesmas entradas.
Existe um nome diferente para esse tipo de função, ele não tem nome ou ainda é realmente puro e estou enganado sobre a definição de pureza?
writeToDatabase
falhar, isso poderá desencadear uma exceção, fazendo com que sua segunda add
função produza uma exceção às vezes, mesmo se chamada com os mesmos argumentos que antes não apresentavam problemas ... na maioria das vezes, os efeitos colaterais introduzem esse tipo de condições relacionadas a erros que quebram "pureza de entrada e saída".
F(x)
é definido para retornar true
se for chamado com o mesmo argumento da chamada anterior. Claramente com a sequência {1,2,2} => {undefined, false, true}
isso é determinístico, mas fornece resultados diferentes para F(2)
.