Чистые и нечистые функции

Это два термина, которые вы всегда слышите в языке программирования: чистые и нечистые функции.

Вы знаете, что 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, делает ее нечистой функцией.

Давайте рассмотрим другие побочные эффекты на примерах:

  1. Манипуляции с 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 переменных.

Спасибо за прочтение поста!

Надеюсь, вы нашли эту статью полезной. Если у вас есть какие-либо вопросы, не стесняйтесь оставлять их в разделе комментариев или обращаться ко мне здесь 👇

🌟 Твиттер | 📚 Электронные книги | 🌟 Инстаграм