Скажем, у нас есть нормальная чистая функция, такая как
function add(a, b) {
return a + b
}
И тогда мы изменим его так, что он имеет побочный эффект
function add(a, b) {
writeToDatabase(Math.random())
return a + b;
}
Насколько я знаю, это не считается чистой функцией, потому что я часто слышу, как люди называют чистые функции «функциями без побочных эффектов». Однако он ведет себя как чистая функция, поскольку он возвращает тот же вывод для тех же входов.
Есть ли другое название для этого типа функции, оно безымянное или все еще на самом деле чистое, и я ошибаюсь в определении чистоты?
writeToDatabase
сбой, это может вызвать исключение, в результате чего ваша вторая add
функция иногда создает исключение, даже если она вызывается с теми же аргументами, что раньше не имели проблем ... в большинстве случаев наличие побочных эффектов приводит к возникновению такого рода связанных с ошибкой условий, «чистота ввода-вывода».
F(x)
определяется для возврата, true
если он вызывается с тем же аргументом, что и предыдущий вызов. Очевидно, что с последовательностью {1,2,2} => {undefined, false, true}
это является детерминированным, но это дает разные результаты для F(2)
.