Скажімо, у нас є нормальна чиста функція, така як
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)
.