纯函数

作者 : 开心源码 本文共1234个字,预计阅读时间需要4分钟 发布时间: 2022-05-13 共135人阅读
纯函数概念
  • 相同的输入总是返回相同的输出,函数式编程依赖于纯函数

  • lodash:纯函数功能库

    const _ = require('lodash')const array = ['jack', 'tom', 'lucy', 'kate']console.log(_.first(array))console.log(_.last(array))console.log(_.toUpper(_.first(array)))console.log(_.reverse(array))const r = _.each(array, (item, index) => {  console.log(item, index)})
  • 数组slicesplice分别是纯函数和不纯的函数

    let number = [1, 2, 4, 4]number.slice(0, 2) //  [1, 2]number.slice(0, 2) //  [1, 2]number.slice(0, 2) //  [1, 2]number.splice(0, 2) // [1, 2]number.splice(0, 2) // [4, 4]number.splice(0, 2) // []
纯函数意义
  • 纯函数不依赖外部环境,不会产生反作用,提高函数的复用性

    反作用:程序执行中,系统状态的一种变化,或者者与外部世界进行的可观察的交互(跟函数外部环境发生的交互都是反作用)

    反作用让函数变得不纯,函数依赖于外部状态就无法保证输出相同,就会带来反作用

    所有的外部交互都有可能带来反作用,反作用使得方法通用性下降,不适合扩展和复用性,同时反作用会给程序带来安全隐患和不确定性;所以反作用要尽可能控制

    常见的反作用:

    • 更改文件系统
    • 配置文件
    • 往数据库插入记录
    • 发送一个http请求
    • 可变数据
    • 打印/log
    • 获取客户输入
    • DOM查询
    • 访问系统状态
    // 不纯的const MinimumAge = 18const checkAge = age => age >= mini// 纯函数const checkAge = age => {  const MinimumAge = 18  return age >= MinimumAge}
  • 可读性更强

  • 可测试 纯函数测试更方便

    test('checkAge(20) 等于 true', () => {  expect(checkAge(20)).toBe(true);})
  • 可以组装成复杂函数

  • 可缓存(相同输入总是返回相同结果)

    const _ = require('lodash')const getArea = r => Math.PI * r * rlet getAreaWithMemory = _.memoize(getArea)console.log(getAreaWithMemory(4))// 自己模拟memoizeconst memoize = f => {  let cache = {}    return function ()  {        const key = JSON.stringify(arguments)        cache[key] = cache[key] || f.apply(f, arguments)        return cache[key]    }}
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 纯函数

发表回复