JavaScript语法进阶 — 函数化编程

作者: Vampire_时代 | 来源:发表于2018-12-12 11:30 被阅读18次
    函数化编程.jpg

    前言

    记得之前面试iOS的时候被问到Swift语言特性有哪些,回答的其中一条包括函数化编程,但是怎么函数化的却一时没怎么答好(的确是运用的太少,只处于理论阶段)。如今在数据处理模块中充斥着map,filter,Object.assign等等将计算过程分解成可复用的函数。

    ​ 以及代码皆为JavaScript演示

    什么是面向对象编程

    个人理解的可能是复杂的代码简单化?计算方法的抽象?函数的合并?但可能没理解到 函数就是相当于太极,无级就图灵机,Lambda,太极就是函数

    为什么要运用函数化编程这种编程范式

    ​ 有多少大侠或多或少写过类似这样的代码

    const a = [1,2,3,4,5,6];
    const b = [5,6,7];
    for(let i = 0; i < b.length; i++) {
        a.push(b[i]);
    }
    
    const c = [1,2,3,4,5,6];
    const d = [];
    for(let i = 0; i < c.length; i++) {
        if (c[i] > 4) {
            d.push(c[i]);
        }
    }
    

    ​ 其实拼接两个数组只需要这样a.concat(b),筛选只需要d.filter((item)=> item > 4),这就是高阶函数代来的便捷,还有类似的:

    // 获取字典的key
    const anObj = { 100: 'a', 2: 'b', 7: 'c' };
    console.log(Object.keys(anObj)); // console: ['2', '7', '100']
    
    // 同理
    const anObj2 = { 100: 'a', 2: 'b', 7: 'c' };
    console.log(Object.values(anObj2)); // console: ['a', 'b', 'c']
    

    函子

    ​ 函数不仅可以用于同一个范畴之中值的转换,还可以用于将一个范畴转成另一个范畴。这就涉及到了函子(Functor)。

    ​ 不才,恐怕解释不好,还是参考阮老师的函数式编程入门教程.

    柯里化函数

    // 柯里化之前
    function add(x, y) {
      return x + y;
    }
    
    add(1, 2) // 3
    
    // 柯里化之后
    function addX(y) {
      return function (x) {
        return x + y;
      };
    }
    
    addX(2)(1) // 3
    

    虽然在Swift中接触到这个概念,但是运用还不是太熟练~待补充(更方便的处理参数?在复杂的方法中抽出函数?增加阅读性?

    结尾

    当然我们无形中也封装过这些函数,将一个值经过多次处理变成另外一个值,例如将时间戳转化为标准时间,其实就是把中间步骤合并成一个函数。当然它最好是没有副作用的函数~

    相关文章

      网友评论

        本文标题:JavaScript语法进阶 — 函数化编程

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