web前端:函数化编程

    作者:xy2370 更新于: 2020-03-05 21:25:23

    Web开发

      为了使计算机能够理解人的意图,人类就必须将需解决的问题的思路、方法和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算体系之间交流的过程就是编程。

      百科定义:

      函数化编程:又称泛函数编程,是一种编程泛式,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。

      简单理解,以函数为单元,对复杂逻辑进行拆分,将复杂逻辑转化为多个简单函数逻辑,同时通过对函数进行层层调用,来达到最终目的。

      特点:函数可以作为参数传入,也可以作为返回值返回。

      1.纯函数&&非纯函数

      定义:输入一个x产生输出一个唯一y值

      特点:

      1.输入相同的值时,输出也是一样的,不受外部环境影响

      2.运行时,无副作用,不对外部环境产生影响

      例子:

      Array.prototype.slice;

      functionadd(a){

      returna+1

      }

      add(1)

      add(1)

      那么非纯函数则是正好相反:易受外部环境影响,提高了系统复杂性。

      vararr=[1,3,5,6];

      arr.splice(0,1)==>[1]

      arr.splice(0,1)==>[3]

      varb=34;

      functionadd(a){

      returna+b;

      }

      纯函数是函数编程的基础,那么如何将非纯函数转化为纯函数呢?

      2.函数柯里化(curry)

      简单的定义就是:将一个低阶函数转化为高阶函数的过程被称之为柯里化。

      这样说未免有点不太清楚,就是将一个需要传入多个参数的函数转化为多个只需要传入一个参数的函数。

      如:

      function(arg1,arg2,arg3)==>function(arg1)(arg2)(arg3)

      functionadd(a,b){

      returna+b

      }

      add(1,2)

      ==>

      functionadd(a){

      returnfunction(b){

      returna+b;

      }

      }

      add(1)(2)

      这样一看是不是就清楚的多了,其中有提到一个概念高阶函数,那么什么是高阶函数呢?

      高阶函数:"Higher-orderfunction",js中的函数都是指向某个变量的,那么同样可以指向某个函数,同理,也可以将某个函数作为返回值,返回。

      所谓的高阶函数,就是可以接受一个函数为参数或返回一个函数的函数。

      例子:

      vararr=[1,2,34]

      arr.map(function(item,index){

      returnitem*2

      })

      functionadd(a,b,fn){

      returnfn(a)+fn(b)

      }

      3.声明式语句&&命令式语句

      顾名思义,命令式语句是,一步一步的指令,告诉你要怎么做,而声明式语句,则是只需要说要什么,具体怎么做,你自己看着办

      命令式:

      vararr=[1,2,4,5],result=[];

      for(vari=0;i

      result.push(arr[i])

      }

      声明式:

      varresult=arr.map(function(item){returnitem})

      从这两个例子,就可以清楚的看到命令式语句和声明式语句的区别了

      通过上面的内容,已经对js函数化编程有了一个较为基础的浅显的认识,至于更深层次的认识,就需要看看其他大佬的文章了。

      编程是编写程序的中文简称,就是让计算机代为解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程。

课课家教育

未登录