前端学习之函数式编程—函数组合(代码片段)

萌萌的DDD 萌萌的DDD     2022-12-25     457

关键词:

Part 01 函数组合

  • 纯函数和柯里化很容易写出洋葱代码=====>h(g(f(x)))一层一层套起来不宜阅读
    • 例如:获取数组最后的一个元素再转大写字母 _.toUpper(_.first(_.reverse(array)))
  • 函数组合可以让我们把细粒度的函数重新组成一个新的函数

管道

管道代表了使用函数处理数据的过程,给fn函数输入参数a,返回结果b,可以想想a数据通过一个管道得到

 a为输入值,fn处理a ,得到输出b,但当Fn处理过程较长时,出现问题无法精准定位,因此我们可以拆分处理过程。

 将fn拆分为f1 f2 f3 得到m n 作为输出值  最后输出n,这样那个处理过程出现问题可以单一进行解决。

fn = compose(f1, f2, f3)
b = fn(a)

part 02 函数组合概念

  • 函数组合(compose):如果一个函数要经过多个函数处理才能得到最终值,这个时候可以把中间过程的函数合并成一个函数
    • 函数就像数据的管道,函数组合就是把管道链接起来,让数据通过多个管道形成最终结果
    • 函数组合默认从右到左执行
// 函数组合演示

function compose(f1, f2) 
    // 输出函数 形参为最初接受的结果
    return function(value) 
        // 返回最终结果
        return f1(f2(value))
    


function reverse(array) 
    return array.reverse()


function first(array) 
    return array[0]


// 由右到左执行  因此反转函数在最右侧
// 反转并返回数组第一个值
const last = compose(first, reverse)


console.log(last([1, 2, 3])) // 3

 


part 03 函数组合 --- 结合律

  • 函数组合要满足结合律
    • 我们既可以把g和h组合,还可以把f和g组合,结果都是一样的
// 结合律

let f = compose(f,g,h)

let value = compose(compose(f,g),h)

// true

前端学习之函数式编程—高阶函数(代码片段)

 什么是高阶函数(Higher-orderfunction)    可以把函数作为参数传递给另一个函数    可以把函数作为另一个函数的返回结果Part1可以把函数作为参数传递给另一个函数实现forEach函数//高阶函数-函数作为参数functionforEach(array,fn)for(... 查看详情

前端学习之函数式编程—闭包(代码片段)

闭包Part01闭包的概念闭包(closure):函数和其周围的状态(词法环境)的引用捆绑在一起形成闭包. 可以在另一个作用域中调用一个函数的内部函数并访问到该函数作用域中的成员//函数作为返回值functionmakeFn()letmsg='hellofunction'... 查看详情

前端学习之函数式编程—柯里化(代码片段)

part01--柯里化概念柯里化是为了解决函数中不纯函数或函数硬编码的问题什么是硬编码functiongetAge(age)letmin=18returnage>min 函数式编程是保证相同的调用总能得到相同的结果,但当相同的调用有可能不能得到相同的结果时则... 查看详情

前端学习之函数式编程—纯函数(代码片段)

Part01纯函数概念纯函数:相同的输入永远会得到相同的输出,而且没有任何可观察的副作用纯函数就类似数学中的函数,用来描述输入与输出之间的关系,例如:y=f(x)Part02案例:slice和splice函数 数组的slice和splice分别是纯函数和不纯... 查看详情

scala学习之函数式风格编程(代码片段)

FUNCTIONALPROGRAMMINGhttps://docs.scala-lang.org/overviews/scala-book/functional-programming.htmlScala允许您以面向对象编程(OOP)风格、函数式编程(FP)风格甚至混合风格编写代码,结合使用这两种方法。本书假设您是从Java、C++或C#等OOP语言来... 查看详情

函数式编程:纯函数&柯里化&组合函数(代码片段)

函数式编程:纯函数&柯里化&组合函数纯函数函数的柯里化组合函数纯函数相同的输入值,产生相同的输出在函数的执行过程中,不能产生副作用。不能对传入的参数进行修改,不依赖上层作用域内的数据。... 查看详情

函数式编程-compose与pipe(代码片段)

函数式编程中有一种模式是通过组合多个函数的功能来实现一个组合函数。一般支持函数式编程的工具库都实现了这种模式,这种模式一般被称作compose与pipe。以函数式著称的Ramda工具库为例。constR=require('ramda');functioninc(num... 查看详情

前端开发函数式编程入门(代码片段)

前端开发函数式编程入门函数式编程是一门古老的技术,从上个世纪60年代Lisp语言诞生开始,各种方言层出不穷。各种方言带来欣欣向荣的生态的同时,也给兼容性带来很大麻烦。于是更种标准化工作也在不断根据现... 查看详情

javascriptes6函数式编程:柯里化偏应用组合管道(代码片段)

上一篇介绍了闭包和高阶函数,这是函数式编程的基础核心。这一篇来看看高阶函数的实战场景。首先强调两点:注意闭包的生成位置,清楚作用域链,知道闭包生成后缓存了哪些变量高阶函数思想:以变量作用域作为根基,以... 查看详情

函数式编程简介-附入门方法(代码片段)

WHAT?什么是函数式编程?函数式编程是一种编程范式。编程范式又是什么?编程范式是一种解决问题的思路。我们熟悉的命令式编程把程序看作一系列改变状态的指令;而函数式编程把程序看作一系列数学函数映射的组合。编程... 查看详情

php函数式编程(代码片段)

什么是函数式编程与面向对象编程(Object-orientedprogramming)和过程式编程(Proceduralprogramming)并列的编程范式。最主要的特征是,函数是第一等公民。强调将计算过程分解成可复用的函数,典型例子就是map方法和reduce方法组合而... 查看详情

scala深入学习之函数学习(代码片段)

目录一、函数的定义二、匿名函数三、递归函数四、无参函数五、方法和函数的区别联系一、函数的定义代码示例:packagefunctionDemo/***@author:蔡政洁*@email:caizhengjie888@icloud.com*@date:2020/8/23*@time:2:14下午*/objectFunction... 查看详情

pyython学习之函数(代码片段)

计算机程序中,函数是一种基本的代码抽象方式。代码执行过程中通过调用函数名和参数可以调用特定函数而得到我们想要的结果。通过调用函数,程序开发人员可以忽略函数执行的过程,而可将更多的心思放在思考问题上。在... 查看详情

玩转javascript面试:何为函数式编程?(代码片段)

函数式编程在JavaScript领域着实已经成为一个热门话题。就在几年前,很多JavaScript程序员甚至都不知道啥是函数式编程,但是就在近三年里我看到过的每一个大型应用的代码库中都包含了函数式编程思想的大规模使用。函数式编... 查看详情

swift函数式编程十一(解析器组合算子)(代码片段)

...xff0c;解析失败则什么也不返回。这个过程总结为这样一个函数类型:typealiasParser<Result>=(String)->(Result,String)?将Parser类型定义为一个结构体而不是简单的类 查看详情

kotlin函数式编程①(函数式编程简介|高阶函数|函数类别|transform变换函数|过滤函数|合并函数|map变换函数|flatmap变换函数)(代码片段)

...数式编程简介1、编程范式2、高阶函数3、函数式编程4、前端开发技术二、函数类别三、变换函数四、map变换函数1、map函数原型分析2、map函数设计理念3、代码示例五、flatMap变换函数1、flatMap函数原型分析2、代码示例一、函数式... 查看详情

kotlin学习之函数(代码片段)

函数声明在kotlin中用关键字fun声明函数:fundouble(x:Int):Int其中Int是返回值类型,x指明参数类型是为Int函数用法通过传统方法调用函数:valresult=double(2)可以通过.调用成员函数Sample().foo()Sample()是Sample类的一个实例Infix符号... 查看详情

函数式编程—高阶函数(代码片段)

一、函数式编程概念简介函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设... 查看详情