美文网首页大前端学习日记
函数式编程学习笔记

函数式编程学习笔记

作者: 桃之_夭夭_ | 来源:发表于2020-10-30 22:45 被阅读0次

函数式编程

函数式编程的核心思想是把运算过程抽象成函数,编程过程中面向函数进行编程

一、纯函数:相同的输入永远会得到相同的输出,而且没有任何可观察的副作用

// 纯函数
function add(a, b){
  return a+b
}

// 非纯函数
const array = [1,2,3]
array.reverse()

优点:

1.可缓存,如lodash中的memoize

2.可测试

3.并行处理:多线程环境下并行操作共享的内存数据很可能会出现意外情况。纯函数不需要访问共享的内存数据,所以在并行环境下可以任意运行纯函数(Web Worker)

二、柯里化

当一个函数有多个参数的时候先传递一部分参数调用它(这部分参数以后都不变)然后返回一个新的函数接收剩余参数,返回结果。相当于把一元函数变成多元函数

f(x,y,z)=>f(x)(y)(z)||f(x,y)(z)||f(x)(y,z)

三、函数组合:把细粒度的函数重新组合生成一个新的函数;如果一个函数经过多个函数处理才得到最终值,这时候可以把中间过程的函数合并成一个函数

// 组合函数
const fp = require('lodash/fp')
const f = fp.flowRight(fp.join('-'), fp.map(fp.toLower), fp.split(' '))
console.log(f('NEVER SAY DIE'))

四、函子:是一个特殊的容器,通过一个普通的对象来实现,该对象具有map方法,map方法可以运行一个函数对值进行处理(变形关系)

const fs = require('fs')
const fp = require('lodash/fp')
// Monad函子
class IO {
  static of(value) {
    return new IO(function () {
      return value
    })
  }

  constructor(fn) {
    this._value = fn
  }

  map(fn) {
    return new IO(fp.flowRight(fn, this._value))
  }

  join() {
    return this._value()
  }

  flatMap(fn) {
    return this.map(fn).join()
  }
}

let readFile = function (filename) {
  return new IO(function () {
    return fs.readFileSync(filename, 'utf-8')
  })
}
let print = function (x) {
  return new IO(function () {
    console.log(x)
    return x
  })
}

let cat = fp.flowRight(print, readFile)
let r5 = cat('package.json')._value()._value()
console.log(r5)

let r6 = readFile('package.json')
  // .map((x) => x.toUpperCase())
  .map(fp.toUpper)
  .flatMap(print)
  .join()
console.log(r6)

文章内容输出来源:拉勾教育大前端高薪训练营;

相关文章

  • 函数式编程

    拉勾大前端的笔记,仅作为学习记录 课程介绍 为什么学习函数式编程,以及什么是函数编程 函数式编程的特性(纯函数,柯...

  • Scala 学习笔记

    Scala 学习笔记 1.函数式编程 函数式编程:函数式编程把函数当作一等公民,充分利用函数,支持函数的多种使用方...

  • Java 8函数式编程学习笔记

    Java 8函数式编程学习笔记 author:Gavin date:2018/11/09 什么是函数式编程 在思考...

  • 初入函数式编程

    真·函数式编程 学习函数式编程的学习笔记 禁用var/let,所有东西都用const定义,也就是说无变量,强制im...

  • 学习笔记

    学习笔记 函数式编程 函数式编程就是对运算过程的抽象,其中的函数是指数学中的函数即映射关系,相同的输入始终要得到相...

  • 2018-09-21

    java学习笔记(二) 前一篇简单的介绍了Java8函数式编程,这篇还将继续函数式编程之旅。 流 在Java程序中...

  • 理解函数式编程

    这篇文章是在学习函数式编程时的学习笔记,里面有很多自己对函数式编程的理解,有些理解可能不一定准确,希望对大家学习函...

  • 函数式编程

    为什么学习函数式编程 函数式编程随着react的流行受到越来越多的关注 vue3也开始拥抱函数式编程 函数式编程可...

  • 函数式编程

    1 文章目标 为什么要学习函数式编程以及什么是函数式编程 函数式编程的特性(纯函数、柯里化、函数组合等) 函数式编...

  • Python进阶语法——函数式编程、模块,面向对象

    一、 Python进阶学习 一、函数式编程 1.1函数式编程 1.2高阶函数 1.2.1 import mathd...

网友评论

    本文标题:函数式编程学习笔记

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