React Native开发React Native开发经验集React Native开发技巧

JavaScript语法进阶 — 函数化编程

2018-12-12  本文已影响18人  Vampire_时代
函数化编程.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中接触到这个概念,但是运用还不是太熟练~待补充(更方便的处理参数?在复杂的方法中抽出函数?增加阅读性?

结尾

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

上一篇下一篇

猜你喜欢

热点阅读