对于函数式编程的新理解

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

函数式编程的思想在于递归,但是以前我一直没有理解,为什么是递归,我洗澡时候想了想,应该是因为,如果连变量的值也通过函数来实现的话,那不是得用递归了嘛,比如要实现自然数,如果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既支持函数式编程和面向对象编程,如果将两者结合怎么样?还需继续看看

原文地址:https://www.cnblogs.com/GODYCA/p/2863567.html