当前位置: 首页 > 科技观察

从JS学习函数式编程的五大支柱

时间:2023-03-17 19:32:30 科技观察

一、什么是函数式编程从FP函数式编程的角度来看,世间万物都是在处理数据流:输入-->处理--输出FP函数式编程是一种思维方式:比如你不是函数式的,你会写这样的程序:>varname="gaowei";>vargreeting="Hello,I'm";;>console.log(greeting+name)Hello,I'mgaowei函数范式编程会这样写程序:>functiongreet(name){...return"Hi,I'm"+name;...}>greet("Gaowei");"Hi,I'mGaowei",使用pure-functionpure-function避免副作用来说明"impurefunction",>letname="Gaowei";>functiongreet(){...console.log("Hi,I'm"+name);...}>greet()你好,我是mgaowei这不是一个纯函数,因为没有返回结果。纯函数为:>functiongreet(name){...return"Hi,I'm"+name;...}3.使用高阶函数,函数本身可以作为inhigher中的输入或输出-order函数,函数本身可以作为输入和输出。>functionsetAdjectifier(形容词){...returnfunction(描述){.....returnadjective+""+描述;....}...}>letgreatifier=setAdjectifier("great");>greatifier("meeting")'greatmeeting'4.不迭代,使用map,reduce和filtermap和filter的关系和区别可以看下图:5.不改变输入数据,使用不可改变的数据结构as举个例子,我们平时的做法往往是:>letfruits=['apple','banana','peach'];>fruits[2]='orange''orange'>fruits['apple','banana','orange']变异的处理方法会修改原始数据。尝试函数式编程的方法是:>newFruits=fruits.map(rm=>rm=="orange"?"peach":rm)['apple','banana','peach']>fruits['apple','banana','orange']常用的可以高效处理不可变数据的库有:Mori、immutable.js、Underscor、Lodash、Ramda等。