标签:一点 param 也会 操作 sid turn 改变 func 赋值
Functional Programming(函数式编程)在概念上和Object Oriented Programming(面向对象编程), Procedural Programming(过程化编程)类似, 是一种编程范式。
与OOP以对象为中心的理念不同,FP将所有计算机的操作视为函数运算,函数是操作的基本单位。函数拥有和基本类型一样的地位,可以将一个变量赋值为函数(First class -- 一等公民)
,可以在函数的参数中传递函数(higher-order function -- 高阶函数)
。
副作用(side effects)
的,不需要考虑死锁问题,适合并发编程,因此在云计算领域得到了广泛应用(Scala)
好了,进入正题
以下示例代码均为JavaScript
先来看两段代码
//代码片段1
let minium = 20;
const checkAge = (age)=> age >= minium;
//代码片段2
let number = 2;
const multipleNumber = (n) => {
number = number * n;
return number;
}
这两段代码有问题吗?
通常情况下,代码片段1并不会发生什么问题, 我们传入年龄,并且判断是不是大于20岁。
但如果有人修改了minium
呢?此时判断的条件改变了,导致我们的结果也会改变。当我们第二次运行checkAge(22)
的时候,可能返回的并不是第一次运行的结果。
对于checkAge
这个函数来说,它需要观测的值不仅有入参age
,还有一个全局变量minium
,它的运行结果依赖系统状态,这对于程序员来说是十分痛苦的。
而代码片段2就很容易发现问题了,这个函数修改了一个全局变量,换言之,它修改了系统状态,当第二次输入相同参数的时候你会得到一个不一样的结果。
不,这太让人难过了,这不是我们想要的,我们希望我们的函数足够纯净,相同的输入永远得到相同的输出。而且,不要做多余的事:
偷偷在console里打一个log
偷偷给某个api发送一个request
偷偷修改本地文件系统
标签:一点 param 也会 操作 sid turn 改变 func 赋值
原文地址:https://www.cnblogs.com/dpqq/p/10467837.html