最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 函数组合、函子

    正文概述 掘金(辉不想说话77944)   2021-04-23   618

    函数组合

    函数组合、函子 函数组合 (compose):只关心3个小函数,和输入,不关心中间结果

    fn = compose(f1, f2, f3)
    b = fn(a)
    
    // 组合函数
    const reverse = arr => arr.reverse()
    const first = arr => arr[0]
    const toUpper = str => str.toUpperCase()
    
    const f = compose(toUpper, first, reverse)
    function compose(...args) {
        return function(value) {
            return args.reverse().reduce(function(total, func) {
                return func(total)
            },value)
        }
    }
    
    console.log(f(['askj', 'rose', 'jack']))
    
    // Pointfree
    // world hello you => W. H. Y.
    const firstLetterToUpper = fp.flowRight(fp.join('. '), fp.map(fp.flowRight(fp.toUpper, fp.first)) ,fp.split(' '))
    console.log(firstLetterToUpper('world hello you'))
    

    目的:最大限度的,保证函数的复用

    函子

    通过函子可以控制副作用,处理函数异常,异步操作等

    • 函数式编程的运算不直接操作值,而是由函子完成
    • 函子就是一个实现了 map 契约的对象
    • 我们可以把函子想象成一个盒子,这个盒子里封装了一个值
    • 想要处理盒子中的值,我们需要给盒子的 map 方法传递一个处理值的函数(纯函数),由这个函数来对值进行处理
    • 最终 map 方法返回一个包含新值的盒子(函子)
    // 函子
     class Container {
        static of (value) {
           return new Container(value)
        }
    
         constructor (value) {
            this._value = value
         }
    
         map (fn) {
            return Container.of(fn(this._value))
         }
     }
    
     let r = Container.of(5)
                .map(x => x + 2)
                .map(x => x * x)
    
     console.log(r)
    

    起源地下载网 » 函数组合、函子

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元