什么是函数式语言

作者: iamsonormal2333 | 来源:发表于2017-05-18 21:11 被阅读43次

    之前会员培训的时候讲过一些函数式语言的东西,现在干脆整理一下,写到简书上。

    函数式语言的有两大指导理念。理解了这两大指导理念也就对函数式语言有了一个基本的认识了。

    第一个理念:函数是头等值。这个理念我倾向于分成值和头等两个概念理解。函数是值这个概念我相信还是比较好理解的。值可以被随意地提供给变量或函数等等,如果将函数当作值,就意味着函数可以被当成参数被提供给其他函数,也可以在函数中当作返回值,甚至可以在函数中定义函数。

    而头等这个概念则是意味着函数的使用是不受限制的。不妨把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,那么我觉得多多用函数式编程是种不错的选择

    相关文章

      网友评论

        本文标题:什么是函数式语言

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