函数式编程

诞生50多年之后,函数式编程(functional programming)开始获得越来越多的关注。

不仅最古老的函数式语言Lisp重获青春,而且新的函数式语言层出不穷,比如Erlang、clojure、Scala、F#等等。目前最当红的Python、Ruby、Javascript,对函数式编程的支持都很强,就连老牌的面向对象的Java、面向过程的PHP,都忙不迭地加入对匿名函数的支持。越来越多的迹象表明,函数式编程已经不再是学术界的最爱,开始大踏步地在业界投入实用。

也许继\面向对象编程\之后,\函数式编程\会成为下一个编程的主流范式(paradigm)。未来的程序员恐怕或多或少都必须懂一点。

但是,\函数式编程\看上去比较难,缺乏通俗的入门教程,各种介绍文章都充斥着数学符号和专用术语,让人读了如坠云雾。就连最基本的问题\什么是函数式编程\,网上都搜不到易懂的回答。 下面是我的\函数式编程\学习笔记,分享出来,与大家一起探讨。内容不涉及数学(我也不懂Lambda Calculus),也不涉及高级特性(比如lazy evaluation和currying),只求尽量简单通俗地整理和表达,我现在所理解的\函数式编程\以及它的意义。

我主要参考了Slava Akhmechet的\The Rest of Us\。 一、定义

简单说,\函数式编程\是一种\编程范式(\programming paradigm),也就是如何编写程序的方法论。

它属于\结构化编程\的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。举例来说,现在有这样一个数学表达式:

(1 + 2) * 3 - 4

传统的过程式编程,可能这样写:

var a = 1 + 2; var b = a * 3; var c = b - 4;

函数式编程要求使用函数,我们可以把运算过程定义为不同的函数,然后写成下面这样:

var result = subtract(multiply(add(1,2), 3), 4); 这就是函数式编程。 二、特点

函数式编程具有五个鲜明的特点。 1. 函数是\第一等公民\

所谓\第一等公民\(first class),指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。

举例来说,下面代码中的print变量就是一个函数,可以作为另一个函数的参数。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4