对函数式编程的看法


类型:Python,随感,创建时间:Dec. 30, 2011, 7:22 p.m.

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/14/。

最近函数式编程概念很火,似乎每个“现代化”的编程语言都要沾一下函数式编程,才能称之为现代化的编程语言。java打算在jdk7中加入闭包,.net则早已支持lambda语句。至于python,ruby,javascript等这些过程化的编程语言则争先恐后地加入了函数式编程的战团,各展优雅。可是,函数式编程真的那么重要吗?

这些过程化编程语言通常提供了一些高阶函数,以及对于闭包的支持。比如python提供了

  • map(function, sequence) -> list,相当于:

    result=[]
    for e in sequence:
        result.append(function(e))
    return result
    
  • filter(function,sequence) -> list,相当于:

    result=[]
    for e in sequence:
        if function(e):
            result.append(e)
    return result
    
  • reduce(function,sequence) -> result,相当于:

    result=sequence.pop(0)
    while sequence:
        result=function(result, sequence.pop(0))
    return result
    

这些函数在现有的过程式语言环境中基本上都是类似的实现。可以说,不过是语法糖而已,函数式编程擅长的并行计算不可能在这种过程式的编程语言中自动地获得。这种函数式编程有什么意义?更好看还是更简洁?难道还有其它的理由吗?

闭包是具有闭合作用域的匿名函数。他带来的优点和缺点在很多文章中已经被详加探讨。基本上,闭包在大多数过程化的编程语言里被实现为匿名类。说实话,自从用过闭包之后,我就很自觉地将闭包的思想用于软件设计。不过,毕竟只是语法糖,有也可以,没有也不是很遗憾。如同前所述的高阶函数,我认为,它对现有的过程化编程语言改进不是很大。怪不得之前有人建议在Python 3000里去掉lambda

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/14/。


暂时还没有任何评论。


何不来发表一下您对本文的看法(使用Markdown语法,分段空两行):