Чистые и нечистые функции
Это два термина, которые вы всегда слышите в языке программирования: чистые и нечистые функции.
Вы знаете, что Pure Function
всегда зависит от аргументов и не должно быть никаких побочных эффектов.
Какой хак побочные эффекты? ☠️
Когда вы пытаетесь использовать внешний код в функции или изменяете переменную, это создает побочный эффект.
Пример:
let num = 10
function mul(val) {
return num += val
}
Как видно из приведенного выше фрагмента, mul
функция зависит от внешней переменной с именем num
. Кроме того, изменение значения num
делает его нечистой функцией.
Давайте рассмотрим еще один быстрый пример:
function hello() {
console.log("Hello Folks!");
}
Итак, что вы думаете о приведенном выше фрагменте? 🤔
.
.
.
Ага! это тоже нечистая функция 😵💫
Как вы все знаете, JavaScript является синхронным, использование `console` или любого `callback` или `promise/fetch` сделает функцию асинхронной.
Здесь использование консоли, которая является веб-API, делает ее нечистой функцией.
Давайте рассмотрим другие побочные эффекты на примерах:
- Манипуляции с DOM, любой обратный вызов или чтение/запись файлов
function mul(a,b) { document.write("Started Multiplication") return a * b } console.log(mul(2,5))
2. Обновление или изменение глобальной переменной в чистой функции
let x = 10 function mul(a,b) { document.write("Started Multiplication") return a * b * x } console.log(mul(2,5))
3. Здесь также мутация внешней переменной, которая зависит от внешней переменной.
let x function mul(a,b) { x = 10 return a * b * x } console.log(mul(2,5))
Давайте разберемся с функцией Pure и Impure, так как теперь у вас есть представление о побочных эффектах.
Чистая функция
- Он всегда возвращает один и тот же результат, если передаются одни и те же аргументы.
- Он никогда не зависит от какого-либо состояния/данных/изменений во время выполнения программы.
- Всегда что-то возвращает
- Здесь написание тестовых случаев будет простым
Нечистая функция
- Изменение внутреннего состояния любого аргумента, который был передан
- Это может вступить в силу, ничего не возвращая
- Написание тестовых случаев будет немного сложным, так как могут быть побочные эффекты
Чистые и нечистые методы
Это чистые методы:
- Массив.карта()
- Массив.уменьшить()
- Массив.фильтр()
- Массив.concat()
- … (синтаксис распространения, который в основном используется для создания копий)
Это нечистые методы:
- Массив.сращивание()
- Массив.сортировка()
- Дата.сейчас()
- Math.random()
Бонусный балл 🔖
Вы можете клонировать внешнее состояние в чистую функцию
Клонирование внешнего состояния в чистую функцию не делает функцию нечистой.
Пример:
let name = ["suprabha", "supi"]
function fullName(newName, name) { let clonedName = [...name] clonedName[clonedName.length] = newName return clonedName }
console.log(fullName("sumi", name)) // ['suprabha', 'supi', 'sumi']
В приведенном выше фрагменте вы используете ...
оператор спреда в fullName
функции. Он создаст его клон, а затем обновит его. Таким образом, это не зависит от name
переменных.
Спасибо за прочтение поста!
Надеюсь, вы нашли эту статью полезной. Если у вас есть какие-либо вопросы, не стесняйтесь оставлять их в разделе комментариев или обращаться ко мне здесь 👇
🌟 Твиттер | 📚 Электронные книги | 🌟 Инстаграм