关于纯函数中的' testable result '



JavaScript中有一个名为pure function的概念。它的一个特点是它总是返回一个testable result。我对此感到非常困惑。我想知道它的定义和目标以及为什么。

A"可测试结果";不是JS术语。是一个物理学术语。当你说";可测试结果";就是当你采取同样的行动,得到同样的结果。

例如:

  • 如果你在同一距离投球,它总是在同一时间触地
  • 如果你在1小时内以60公里/小时的速度行驶,你将行驶60公里

因此,在软件中,可测试的结果将是函数,当您传递相同的参数时,您将获得相同的结果。

例如:

  • cos(x)//一切都一样
  • max(a,b,c)//一切都一样
  • uppercase(str)//一切都一样

不可测试结果:

  • random(from, to)//差异结果
  • uuid(str)//差异结果
  • getNowTime(format)//差异结果

现在,pure-function的概念是:

  • 是一个";可测试结果">(换句话说:如果你发送相同的args,你会得到相同的结果(
  • 不使用输入或输出流
  • 不使用全局变量(仅使用局部变量和自变量(
  • 不更改局部静态变量
  • 不改变任何论点

在javascript中,非纯函数的示例:

// Is not a testable result 
function notPure(max, min) {
return Math.random() * (max - min) + min;
}
// Use output stream
function notPure(name) {
const res = "hi " + name;
console.log(res);
return res;
}
// Use global variable [This is a testable result but not pure because global variable]
const globalVar = "jett";
function notPure(lastname) {
return "hi " + globalVar + " " + lastname;
}
// In JS don't exist "local static variables" so is impossible to replicate this case
// Change an argument
function notPure(obj, key, val) {
obj[key] = val;
return obj;
}

纯函数的一些例子是:

function pure(a, b) {
return a + b;
}
function pure(name, lastname) {
return "hi " + name + " " + lastname;
}
function pure(obj, key, val) {
const res = JSON.parse(JSON.stringify(obj));
res[key] = val;
return res;
}

在一些示例中,您将看到";如果存在HTTP请求不是纯函数";这是因为CCD_ 11使用I/O流并且获得不同结果的可能性很高。

编辑:对于纯函数来说,最重要的情况是因为它们是"可测试的";所以你可以在没有任何顾虑的情况下进行单元测试;副作用";在您的代码中。

相关内容

  • 没有找到相关文章

最新更新