函数式编程没有副作用? 网上说,是因为只有返回值,而中间不会抛出任何东西,或者是函数式编程不受任何外界的影响。 这一点我完全没有办法理解, 程序结构写完之后都是固定的,当我输入什么,就输出什么,既然结构固定了,怎么还会有影响呢?
函数式编程在固定的输入下就有固定的输出? 难道不是所有的程序语言在固定的输入下只有固定的输出吗?
说函数式变成语言是透明的,这一点我也完全没有办法理解,什么叫引用透明。
请大佬用比较简单的Java或者Haskell语言解释一下上述三个问题,跪谢!
函数式编程没有副作用? 网上说,是因为只有返回值,而中间不会抛出任何东西,或者是函数式编程不受任何外界的影响。 这一点我完全没有办法理解, 程序结构写完之后都是固定的,当我输入什么,就输出什么,既然结构固定了,怎么还会有影响呢?
函数式编程在固定的输入下就有固定的输出? 难道不是所有的程序语言在固定的输入下只有固定的输出吗?
说函数式变成语言是透明的,这一点我也完全没有办法理解,什么叫引用透明。
请大佬用比较简单的Java或者Haskell语言解释一下上述三个问题,跪谢!
不是“函数式编程没有副作用”,而是避免副作用是函数式编程追求的目标。
函数式编程和函数式编程语言是两个概念,前者是指方法论。好比,C++是OOP语言,但是你完全可以用C++但是不面向对象。或者在C里面模拟面向对象。
看这样一个程序:
#include <stdio.h>
int x;
int foo(int y)
{
x = x + y;
return y;
}
int main()
{
x = 1;
int i = foo(2);
i = foo(2);
...
}
显然虽然传入的参数都是2,但是返回值每次都不同。这就是有副作用。
函数的引用透明性和函数没有副作用是一个事情的两种说法。