纯函数是一个不会持有任何副作用的函数,换句话说,他们不会改变任何它们之外的数据与状态。另外,他们也不会访问除了提供的参数之外的数据与状态。纯函数很像自然的数学函数一样纯净。
纯函数返回的值只由它的参数决定,因为只依赖与它们的参数与外界的数据无关,所以也易于测试。因为纯函数不会访问或者改变全局的数据,所以也适合与并发执行。
是否是纯函数,下面提供了例子:
- 在console打印一个字符串不是纯函数,因为改变了外界的状态。
- 读取文件不是纯函数,因为它依赖于外界不同时间的状态。
- 获取字符串的长度是纯函数,因为只需要输入的String,然后返回长度。
- 获取当前的日期不是纯函数,因为在不同的时间会返回不同的值。
- 得到一个随机数字不是纯函数,因为在每一次调用的时候都会返回不同的值。