美文网首页
什么是函数式编程

什么是函数式编程

作者: 小m_up | 来源:发表于2017-08-06 17:30 被阅读25次

    函数式编程是一种编程范式,常见的编程范式有函数式编程命令式编程
    命令式编程是面向计算机硬件的抽象,有变量,赋值语句,表达式和控制语句,其实就是一个指令序列。
    函数式编程是面向数学的抽象,将计算描述为一种表达式求值,感觉就是函数式程序就是一个表达式。

    本质

    函数式编程中的函数这个术语不是指计算机中的函数,而是指数学中的函数,即自变量的映射。也就是说一个函数的值仅决定于函数参数的值,不依赖其他状态。比如sqrt(x)函数计算x的平方根,只要x不变,不论什么时候调用,调用几次,值都是不变的。
    举个例子:

    [(5+2)-3]*2
    

    传统的过程式变成会这样写:

    const a = 5+2;
    const b = a-3;
    const c = b*2;
    

    那我们的函数式编程应该怎么写呢:

    function add(a,b){
       return a+b;
    }
    function subtract(a,b){
       return a-b;
    }
    function multiply(a,b){
       return a*b;
    }
    let  result = multiply(subtract(add(5,2),3),2);
    

    特点

    • 函数是"第一等公民"
      指的是函数可以在任何地方定义,在函数内或函数外,可以作为函数的参数和返回值,可以对函数进行组合。
    • 只用"表达式",不用"语句"
      "表达式"(expression)是一个单纯的运算过程,总是有返回值;"语句"(statement)是执行某种操作,没有返回值。函数式编程要求,只使用表达式,不使用语句。也就是说,每一步都是单纯的运算,而且都有返回值。
    • 没有"副作用"
      所谓"副作用",指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。
      函数式编程强调没有"副作用",意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值。
    • 不修改状态
      函数式编程只是返回新的值,不修改系统变量。
    • 引用透明
      引用透明,指的是函数的运行不依赖于外部变量或"状态",只依赖于输入的参数,任何时候只要参数相同,引用函数所得到的返回值总是相同的。

    好处

    • 方便代码管理
      函数既不依赖外部的状态也不修改外部的状态,函数调用的结果不依赖调用的时间和位置,这样写的代码容易进行推理,不容易出错。这使得单元测试和调试都更容易。
    • 易于“并发”
      由于(多个线程之间)不共享状态,不会造成资源争用(Race condition),也就不需要用锁来保护可变状态,也就不会出现死锁,这样可以更好地并发起来,尤其是在对称多处理器(SMP)架构下能够更好地利用多个处理器(核)提供的并行处理能力。
    • 代码简洁易于理解
      由于函数式语言是面向数学的抽象,更接近人的语言,而不是机器语言,代码会比较简洁,也更容易被理解。

    相关文章

      网友评论

          本文标题:什么是函数式编程

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