Powiedzmy, że mamy normalną czystą funkcję, taką jak
function add(a, b) {
return a + b
}
A następnie zmieniamy go tak, aby miał efekt uboczny
function add(a, b) {
writeToDatabase(Math.random())
return a + b;
}
O ile wiem, nie jest to uważane za funkcję czystą, ponieważ często słyszę, jak ludzie nazywają funkcje czyste „funkcjami bez skutków ubocznych”. Zachowuje się jednak jak czysta funkcja, o ile zwraca te same dane wyjściowe dla tych samych danych wejściowych.
Czy istnieje inna nazwa dla tego typu funkcji, jest nienazwana, czy nadal jest rzeczywiście czysta i mylę się co do definicji czystości?
writeToDatabase
nie powiedzie, może wywołać wyjątek, powodując, że twoja druga add
funkcja generuje wyjątek, nawet jeśli wywoływana jest z tymi samymi argumentami, które wcześniej nie miały problemów ... przez większość czasu skutki uboczne wprowadzają tego rodzaju warunki związane z błędami, które się psują „czystość wejścia / wyjścia”.
F(x)
zdefiniowano, aby true
zwracał, jeśli jest wywoływany z tym samym argumentem, co poprzednie wywołanie. Oczywiście w sekwencji {1,2,2} => {undefined, false, true}
jest to deterministyczne, ale daje różne wyniki F(2)
.