函数式编程入门经典 读书笔记 第一章

302 阅读2分钟
let precentValue = 5
let callculateTax = (value) => {
    return value / 100 * (100 + precentValue)
}
数学函数定义的关键是函数逻辑不应依赖外部环境,所以我们需要将percentValue移入到函数中作为参数
移除函数对全部变量的访问会使该函数的测试更容易
let callculateTax = (value,precentValue) => {
    return value / 100 * (100 + precentValue)
}

引用透明性

引用透明性:所有的函数对于相同的输入都将返回相同的值

命令式,声明式与抽象

函数式编程主张声明式编程和编写抽象的代码

命令式代码

var array = [1,2,3]
for(i = 0;i<array.length;i++) {
    console.log(array[i])
}

这行代码我们可以理解成我们精准的告诉了编译器我们应该做什么,主张如何

声明式代码

let array = [1,2,3]
array.forEach(e=>{
    console.log(e)
})

好像仔细看我们移除了如何做的部分,使用了一个如何做的抽象函数,开发者只需要关心做什么

函数式编程主张以抽象的方式创建代码,并在其他部门被重用

纯函数

定义:纯函数是对给定的输入返回相同的输出的函数

let double = (value) => value * 2

纯函数的好处

可产生测试代码

没有外界的全局变量的控制,可以产生出可期待的函数返回

合理的代码

对于没有副作用的函数会易于阅读,理解和测试,所以他们也需要一个有意义的名称

并发代码

纯函数允许我们并发的执行代码(web worker),由于没有全局变量的加入和副总用的产生,可以不用考虑并发带来的边际bug

可缓存

let saveobj = {}
let getDouble = (x) => {
    return x*2
}

saveobj.hasOwnProperty(x) ? saveobj[x] : saveobj[x] = getDouble(x)