第1页用函数式编程技术编写优美的 JavaScript
2010-6-29 12:34:29http://www.ibm.com/developerworks/cn/web/wa-javascript.html
函
函函
函数
数数
数式
式式
式编
编编
编程
程程
程
函数式编程只描述在程序输入上执行的操作,不必使用临时变量保
存中间结果。重点是捕捉
“
是什么以及为什么
”
,而不是
“
如何做
”
。
与将重点放在执行连续命令上的过程性编程相比,函数式编程的重
点是函数的定义而不是状态机(
state machine
)的实现。
大型知识管理系统应用程序从使用函数式编程风格上受益颇多,因
为函数式编程简化了开发。
请
请请
请告
告告
告诉
诉诉
诉每
每每
每个
个个
个人
人人
人。
。。
。请
请请
请把
把把
把
这
这这
这个
个个
个提
提提
提交
交交
交给
给给
给:
::
:
Digg
Slashdot
只用三行
Miranda
代码就可以编写例程,根据参
数,使用广度优先或深度优先遍历处理
n
叉树的每个
节点,而且元素可以是任何通用类型。
用
函
数 式 编 程 技 术 编 写 优 美 的
JavaScript
级别: 初级
Shantanu Bhattacharya,
首席顾问
, Siemens Information Systems Limited
2006
年
7
月
20
日
函数式或声明性编程是非常强大的编程方法,正逐渐在软件行业流行起来。这篇文章将介绍一些相关的函数式编程概念,并提供有效
使用这些概念的示例。作者将解释如何使用
JavaScript(TM)™
(
JavaScript
能导入函数式编程的构造和特性)编写优美的代码。
简
简简
简介
介介
介
函数式编程语言在学术领域已经存在相当长一段时间了,但是从历史上看,它们没有丰富的工具和库可供使用。随着
.NET
平台上的
Haskell
的出现,函数式编程变得更加流行。一些传统的编程语言,例如
C++
和
JavaScript
,引入了由函数式编程提供的一些构造和特性。在许多情
况下,
JavaScript
的重复代码导致了一些拙劣的编码。如果使用函数式编程,就可以避免这些问题。此外,可以利用函数式编程风格编写更
加优美的回调。
因为函数式编程采用了完全不同的组织程序的方式,所以那些习惯于
采用命令式范例的程序员可能会发现函数式编程有点难学。在这篇文
章中,您将了解一些关于如何采用函数式风格,用
JavaScript
编写良
好的、优美的代码的示例。我将讨论:
函数式编程概念,包括匿名函数、调用函数的不同方法,以及将
函数作为参数传递给其他函数的方式。
函数式概念的运用,采用的示例包括:
扩展
数组
排
序
;动
态
HTML
生成
的优美代码
;
系
列
函数的应用。
函
函函
函数
数数
数式
式式
式编
编编
编程
程程
程概
概概
概念
念念
念
在那些通过描述
“
如何做
”
指
定解
决
问题的方法的语言中,许多开发
人
员
都
知
道
如何
进
行编码。例如,
要
编写一个
计
算阶乘
的函数,我可以编写一个
循环
来描述程序,或者使用递
归
来
查找
所有数
字
的
乘积
。在这
两种
情况下,
计算
的过
程
都
在程序中
进
行了
详细说
明。
清单
1
显
示了一个
计算阶乘
的可能使用的
C
代码。
清
清清
清单
单单
单
1.
过
过过
过程
程程
程风
风风
风格
格格
格的
的的
的阶
阶阶
阶乘
乘乘
乘
int factorial (int n)
{
if (n <= 0)
return 1;
else
return n * factorial (n-1);
}
这类语言
也叫
做
过程性
编程语言,因为它们定义了解
决
问题的过程。函数式编程与这个
原
理有
显著
不同。在函数式编程中,
需要
描述问题
“
是什么
”
。 函数式编程语言
又叫
做
声明性
语言。同
样
的
计算阶乘
的程序可以写
成
所有
到
n
的数
字
的
乘积
。
计算阶乘
的
典
型函数式程序看起来
如
清单
2
中的示例所示。
清
清清
清单
单单
单
2.
函
函函
函数
数数
数式
式式
式风
风风
风格
格格
格的
的的
的阶
阶阶
阶乘
乘乘
乘
factorial n, where n <= 0 := 1
factorial n := foldr * 1 take n [1..]
第二
个语
句指
明
要
得
到
从
1
开
始
的
前
n
个数
字
的
列表
(
take n [1..]
),
然后找
出它们的
乘积
,
1
为
基
元。这个定义与
前面
的示例不同,没
有
循环
或递
归
。它就
像阶乘
函数的
算
术定义。一
旦
了解了库函数(
take
和
foldr
)和
标记
(
list notation [ ]
)的
意
义,编写代码就
很容
易
,而且可
读
性
也很
好。
从历史上看,函数式编程语言不
太
流行有
各种原
因。但是
最近
,有些函数式编程语言
正在
进
入
计
算
机 行 业 。 其 中 一 个 例 子 就 是
.NET
平 台 上 的
Haskell
。 其 他 情 况 下 , 现
有 的 一 些 语 言 借 用 了 函 数 式 编 程 语 言 中 的 一 些 概 念 。 一 些
C ++
实 现 中 的 迭 代 器 和
continuation
, 以 及
JavaScript
中 提 供 的 一 些 函 数 式 构 造 (
functional construct
) ,
就 是 这 种 借 用 的 示 例 。 但 是 , 通 过 借 用 函 数 式 构 造 , 总 的 语 言 编 程 范 例 并 没 有 发 生 变 化 。
JavaScript
并 没 因 为 函 数 式 构 造 的 添 加 就 变 成 了 函
数 式 编 程 语 言 。
我现在
要
讨论
JavaScript
中的函数式构造的
各种
美
妙之
处,以及在日常编码和工作中使用它们的方式。我们将从一些
基本功
能开
始
,
然后
用
它们
查
看一些更有
趣
的应用。
匿
匿匿
匿名
名名
名函
函函
函数
数数
数
在
JavaScript
中,可以编写匿名函数或没有名
称
的函数。为什么
需要
这
样
的函数
?请继
续
往
下
读
,但首先我们将学习如何编写这
样
一个函
数。如果
拥
有以下
JavaScript
函数:
清
清清
清单
单单
单
3.
典
典典
典型
型型
型的
的的
的函
函函
函数
数数
数
评论7
最新资源