美文网首页
纯函数(2)

纯函数(2)

作者: 抽疯的稻草绳 | 来源:发表于2021-07-26 17:43 被阅读0次

纯函数满足以下条件:

1.相同的输入总会返回相同的输出
2.不产生副作用
3.不依赖外部状态

eg:

example.jpeg

1.纯函数

以下是一个计算产品税后价格(英国税率是20%)的纯函数的例子:
function priceAfterTax(productPrice) { 
      return (productPrice * 0.20) + productPrice;
}
它符合我们所说的两条纯函数的定义。不依赖于任何外部输入,不改变任何外部数据、没有副作用。

2.非纯函数

var tax = 20; 
function calculateTax(productPrice) { 
    return (productPrice * (tax/100)) + productPrice; 
}
其中函数的计算结果取决于外部 tax 变量,而纯函数不能依赖外部变量。
它没有满足定义中的第一个要求,因此这个函数是不纯的。

纯函数的优点:

1.复用性强
2.可测试性强
3.并行代码

即相同输入,永远会得到相同输出,而且没有任何可观察的副作用。如果使用了 setTimeout 、Promise 或更多具有意外情况发生的操作。那么这类操作被称之为 "副作用" Effect。
每一个函数都可以被看做独立单元。纯函数的好处:方便组合、可缓存、可测试、引用透明、易于并发等等。

// 不纯的, minimum 可能被其他操作改变
let minimum = 21;

function checkAge(age) {
  return age >= minimum;
}
// 纯的
function checkAge(age) {
  const minimum = 21;
  return age >= minimum;
}

比如 slice 和 splice, slice 符合纯函数的定义是因为对相同输入它保证能返回相同输出。而 splice 却会改变调用它的数组,这就会产生可观察到的副作用,即这个原始数组永久地改变了。

var countList = [1, 2, 3, 4, 5];

// 纯的
countList.slice(0, 3);
//=> [1, 2, 3]

countList.slice(0, 3);
//=> [1, 2, 3]

// 不纯的
countList.splice(0, 3);
//=> [1, 2, 3]

countList.splice(0, 3);
//=> [4, 5]

相关文章

  • JS纯函数概念

    判断是否为纯函数的两个指标 纯函数和非纯函数的简单例子 1、纯函数 2、非纯函数 Redux中对使用纯函数redu...

  • 纯函数(2)

    纯函数满足以下条件: 1.相同的输入总会返回相同的输出2.不产生副作用3.不依赖外部状态 eg: 1.纯函数 2....

  • 抽象类和纯虚函数

    //纯虚函数 //如果父类中有了 纯虚函数 //1.子类继承父类,就必须要实现纯虚函数 //2.这个父类 就无法实...

  • Python进阶笔记

    文|Seraph 函数式编程 1 纯函数式编程:不需要变量、没有副作用、测试简单2 Python不是纯函数式编程(...

  • 函数柯里化

    一、纯函数 在程序设计中,若一个函数符合以下条件,则这个函数为纯函数:1、确定的输入,一定会产出确定的输出2、函数...

  • 函数式编程(二)—— 纯函数

    目录 纯函数纯函数的概念Lodash——纯函数的代表体验Lodash纯函数的好处可缓存可测试并行处理副作用【函数式...

  • C++语言-多态,纯虚函数,模版函数

    1、虚函数、纯虚函数 需要注意的是,纯虚函数子类是必须继承的,虚函数不是不必须继承的。 2、多态 在C++中默认关...

  • 4.0 C++远征:纯虚函数与抽象类

    3-1纯虚函数抽象类 [TOC] 一、纯虚函数 1.纯虚函数的定义 ​ 纯虚函数,没有函数体,同时定义时在函数...

  • 前端基础—带你理解什么是函数式编程

    框架总览 ? 引言 ? 什么是函数式编程? ? 函数是纯函数? 什么是纯函数? 函数的副作用? 使用纯函数的优点?...

  • 语法

    virtual 1.virtual声明的函数实现多态就是通用的多态实现 2.纯虚函数C++的纯虚函数用于表示一个类...

网友评论

      本文标题:纯函数(2)

      本文链接:https://www.haomeiwen.com/subject/zoxfultx.html