纯函数

作者: 翔子丶 | 来源:发表于2020-12-31 11:43 被阅读0次
纯函数概念
  • 相同的输入总是返回相同的输出,函数式编程依赖于纯函数

  • 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 = 18
    const 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 * r
    let getAreaWithMemory = _.memoize(getArea)
    console.log(getAreaWithMemory(4))
    // 自己模拟memoize
    const memoize = f => {
      let cache = {}
        return function ()  {
            const key = JSON.stringify(arguments)
            cache[key] = cache[key] || f.apply(f, arguments)
            return cache[key]
        }
    }
    
    

相关文章

  • JS纯函数概念

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

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

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

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

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

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

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

  • 纯虚函数和抽象类

    纯虚函数和抽象类 概念 纯虚函数:没有函数体的虚函数。 抽象类:包含纯虚函数的类就称为抽象类。 纯虚函数就是在函数...

  • 纯函数

    Function VS Procedures 这里的纯函数指的是在函数式编程里面的纯函数。要理解好纯函数这个概念,...

  • 函数式编程(二)

    纯函数 函数式编程中的函数,指的就是纯函数,这也是整个函数式编程的核心纯函数:相同的输入永远会得到相同的输出,而且...

  • 纯函数

    纯函数概念 相同的输入总是返回相同的输出,函数式编程依赖于纯函数 lodash:纯函数功能库const _ = r...

  • Clojure学习笔记(三)——函数式编程

    函数式编程的理念 函数式编程使得代码的编写、阅读、测试和重用都更容易了。 纯函数 函数式程序构建于纯函数之上。纯函...

  • 什么是纯函数

    “纯函数”这个概念个人觉得适用与所有的语言。什么是纯函数,纯函数有两个重要的标准,违反任何一个都不是纯函数;1、函...

网友评论

    本文标题:纯函数

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