之前会员培训的时候讲过一些函数式语言的东西,现在干脆整理一下,写到简书上。
函数式语言的有两大指导理念。理解了这两大指导理念也就对函数式语言有了一个基本的认识了。
第一个理念:函数是头等值。这个理念我倾向于分成值和头等两个概念理解。函数是值这个概念我相信还是比较好理解的。值可以被随意地提供给变量或函数等等,如果将函数当作值,就意味着函数可以被当成参数被提供给其他函数,也可以在函数中当作返回值,甚至可以在函数中定义函数。
而头等这个概念则是意味着函数的使用是不受限制的。不妨把Scala中的函数与C/C++的函数指针做比较。虽然函数指针也可以被赋值给变量,也可以被当作参数传递给其他函数,但是函数指针只能指向全局函数,也不能定义匿名函数字面量等等。故函数指针不能被看作函数式编程。
第二个理念是函数英国把输入值映射成输出值,而不是就地修改程序。这句话看起来不太好理解,不如举一个例子。
//C++
int s=0;//全局变量
void a() {
s++;
}
int b(int x) {
return x+1;
}
s=b(s);
这两种方法同样实现了自加操作,但是b函数是将输入值s映射成了输出值s+1,而a方法则是在函数内修改了s的值。
虽然这种明显的影响程序可读性的错误我们不会做,但是下面一种可能就会经常出现了
//Scala
for(arg <- args)
println(arg)
args.foreach(println)
同样是打印出所有的指令行(args),第二种方式可以说是更典型的函数式用法,当然使用第一种做法是无可厚非的,因为这也是有函数式语言的味道,但这也给我们留下了一些问题,函数式究竟可以写的多简略。
掌握函数式编程的诀窍还是多练习,如果你学习Python或者Scala,那么我觉得多多用函数式编程是种不错的选择