乐趣区

关于程序员:纯函数是什么

纯函数就是一个函数,只不过具备一些特点,你可能平时开发中都有用到,只是没有意识到这是一个纯函数。

纯函数(Prue function)具备以下特点:
  1. 纯函数每一次调用时传入同样的参数,返回的都是同样的后果;它不会扭转参数的值,也不会扭转内部变量的值;它不会依赖于内部的变量,仅依赖于你传入的参数;
  2. 纯函数没有其余副作用(side effect)
  3. 如果你每次传入的参数一样,然而返回的后果不一样,则不是一个纯函数

Just show me the code:

一个纯函数:

/* 

    它承受两个参数:一个数组和一个要增加的项
    而后依据这两个参数,返回一个新的数组
    它没有扭转原来参数的值
    每次调用时传递雷同的值,返回的后果永远一样
    它没有批改内部的变量和数据
    
*/
let array = [1, 2, 3];

function addItemToArray(array, item) {return [...array, item];
}

addItemToArray(array, 4);

不是 一个纯函数

/*
    这个函数 return 的值是一个数组
    这个数组是在原来的数组 array 的根底上,追加了一项
    它扭转了内部变量
    每次执行函数时传入同样的值,返回的后果不雷同
    所以它不是纯函数
*/
let array = [1, 2, 3];

function addItemToArray(array, item) {return array.push(item);
}

addItemToArray(array, 4);

一个纯函数:

/*
    它没有扭转内部变量的值
    每次调用时如果传递的值雷同,那每次返回的后果也雷同
*/
let a = 1;
let b = 2;
function add(x, y) {return x + y;}
add(a, b);

不是 一个纯函数:

/*
    它扭转了内部变量的值
    每次返回的后果都不一样。*/
let a = 1;
function add(x, y) {return x += y;}
add(a, 2);
纯函数的长处:

纯函数使代码更牢靠,可利于测试与保护,在开发中应该尽可能多地应用纯函数。

哪些状况不实用纯函数:
  • 网络申请:依据网络申请返回不同的数据
  • 其余须要扭转内部变量的函数

退出移动版