zoukankan      html  css  js  c++  java
  • 对于函数式编程的新理解

    刚刚在洗澡的时候在想函数式编程的东西,函数式编程不是将函数看成一个对象,函数就是变量,它可以作为参数使用,它既可以作为左值来使用也可以作为右值来使用,函数式编程任何一个函数对于同一个输入,既在函数参数列表中的输入,不会产生多余两种不同的结果,为什么呢?因为函数式编程内部所有的变量不受外部的影响,也就是说,没有其他方法来改变我的内部状态,我的内部状态只有局部变量,没有全局变量,反正就是没有与其他函数共享的变量,所以函数式编程就像数据从函数的入口进入,从函数的出口出去,经过函数加工后,再流入其他的函数。

    函数式编程的思想在于递归,但是以前我一直没有理解,为什么是递归,我洗澡时候想了想,应该是因为,如果连变量的值也通过函数来实现的话,那不是得用递归了嘛,比如要实现自然数,如果0表示大O,1表示SO,相当于对0加一,那么SSO不就是2了吗,要求一个n,那么必然得从n-1入手,一直递归下去,在返回n的值。所以对于纯函数编程肯定需要递归来实现。

    那么函数式编程又和面向对象编程又有什么区别呢?

    可以从闭包和类来比较,闭包相当于封装了私有成员和私有函数,其实和类是一脉相承的,如下:

    class A

    {

    private:

      int n;

    public:

      A(int m)

      {

        n = m;

      }

      int add(int m)

      {

        return n+m;

      }

    }

    类A中有私有成员n,和公有函数add(),类A可以实例化多个对象,不同对象的最大区别不就是私有成员的值不一样吗。

    A a(2) 和 A b(3),相当于定义两个函数:

    add(m){

     2+m

    }

    add(m){

    3+m

    }

    这个思想其实和函数式编程是一致的。

    如下:

    python函数式编程:

    def f(n):

      def add(m):

        return m+n

      return add

    a = f(2)  //a不就是相当于上述的A a(2) 

    b = f(3)  //b不就是相当于上述的A b(3) 

    那么python既支持函数式编程和面向对象编程,如果将两者结合怎么样?还需继续看看

  • 相关阅读:
    第四章、Vue组件
    第三章、Vue实例
    第二章、Vue指令
    Python练习实例012
    Python练习实例011
    Python练习实例010
    Python练习实例009
    Python练习实例008
    Python练习实例007
    Python练习实例006
  • 原文地址:https://www.cnblogs.com/GODYCA/p/2863567.html
Copyright © 2011-2022 走看看