好用的純粹函數

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

  • функции не имеют побочных эффектов
  • всегда возвращайте одни и те же вещи каждый раз, когда вы вводите один и тот же ввод, поэтому каждый раз, когда вы вызываете эту функцию с одним и тем же вводом, она всегда дает вам один и тот же вывод и ни на что другое не влияет. Он действует точно так же, как математическая функция, например, sum(2, 2) всегда дает вам четыре, он не влияет ни на что другое вне функции.
  • 簡單來講就是, 輸入啥, 就得啥, 沒有副作用, 不會影響函數以外的資料.

Пример

const array = [1, 2, 3]

一般的函數, 放入參數後原來的陣列被改變了

addElementToArray(4) // array = [1, 2, 3, 4] 原來的陣列被改變了
function addElementAToArray(element) {
  array.push(element)
  console.log(array)
}

另一個例子

addElementToArray(array, 4) // array = [1, 2, 3, 4] 同樣改變原來的陣列
function addElementToArray(a, element) {
  a.push(element)
  console.log(a)
}

純粹函數

addElementToArray(array, 4) // [1, 2, 3, 4] 新的陣列
console.log(array) // [1, 2, 3] 原來的陣列沒變
function addElementToArray(a, element) {
  return [...a, element] // create an array and add element to it
}

純粹函數-範例二

addElementToArray(array, 4) // [1, 2, 3, 4, 0.567123123] 
console.log(array) // 原陣列沒有改變
function addElementToArray(a, element) {
  return [...a, element, Math.random()] // 在新陣列加入亂數
}

缺點

  • 不能存取資料庫
  • 不能存取檔案

因為純粹函數不能改變函數以外資料

參考資料

Изучите чистые функции за 10 минут