利用 CoffeeScript 和 Node 进行函数式 JavaScript 编程

CoffeeScript 是一种相对较新的语言,为开发人员提供了不再有 JavaScript 缺陷的令人期待的方案。利用 CoffeeScript,开发人员即可使用一种轻量级、直观的语言完成编码工作,这种语言就像是 Ruby 和 Python 的混合体。对于兼容浏览器的 Web 应用程序,CoffeeScript 将编译为 JavaScript;对于服务器端应用程序来说,它还能与 Node.js 无缝地协同工作。本文的核心是使用 CoffeeScript 的第三项收益,也就是处理 JavaScript 的函数 方面的功能。CoffeeScript 拥有整洁、现代化的语法,释放了 JavaScript 库中潜藏的函数式编程世界。

主流编程语言中的函数式编程

尽管没有任何一种主流编程语言(例如 Java™ 语言、C++ 和 C#)明确作为函数式编程语言,但这些语言中的附加库和框架实现了各种级别的函数式编程。更重要的是,像 Clojure、F# 和 Erlang 这样的语言日益趋向主流,因为函数式编程所产生的 bug 更少,而且能提高复杂应用程序的生产力。

与 JavaScript 相似,函数式编程同样非常有用,但也是一段时间非常不受欢迎。JavaScript 最初被视为一种玩具式的语言,而函数式编程则因超高的复杂度而闻名。但随着对高度并发式应用程序的需求增加,人们急需找到一种替代方法来取代现有编程风格。事实证明,函数式编程并不存在传闻中的不必要的复杂性,它是一款出色的工具,能够整理某些类型的应用程序中固有的复杂性。

在这篇文章中,我们将探讨如何利用名为 Underscore 的 JavaScript 库在 CoffeeScript 和 Node 中进行函数式脚本编程。将这三项技术结合,就会构成一种强大的技术体系,使您能利用 JavaScript,开发出运用函数式编程的服务器端和基于浏览器的应用程序。

请注意,这篇文章是在我之前的两篇文章 “Java 开发 2.0:面向 Java 开发人员的 JavaScript” 和 “面向 Java 开发人员的 Node.js” 的基础之上编写的。我假设您的开发环境中包含 Node.js,而且您已经熟悉了 Node 中的基本编程。

设置 CoffeeScript 和 Node

如果您的开发环境中已经安装了 Node.js,那么您可以直接使用它的包管理器 (NPM) 来安装 CoffeeScript。以下命令将告知 NPM 在全局安装包:

 

$> npm install -g coffee-script

使用 CoffeeScript 时,您的大部分时间将花费在编写程序、将其保存为 .coffee 文件、然后将结果编译为 JavaScript 方面。CoffeeScript 的语法与 JavaScript 语法极为接近,因此大多数开发人员都能轻松上手;举例来说,清单 1 中的 CoffeeScript 脚本与 JavaScript 极其相似,只是没有 JavaScript 中常见的那种混乱的括号和分号:


清单 1. 典型的 CoffeeScript
 

$> coffee -bpe "console.log 'hello coffee'" console.log('hello coffee');

coffee 命令是执行某些管理任务的捷径。它能够将 CoffeeScript 文件编译为 JavaScript、运行 CoffeeScript 文件,甚至可以作为一种交互式环境或者 REPL(类似于 Ruby 的 irb)。

下面,我将我的脚本存到一个文件中:

 

console.log "hello coffee"

随后我将这个文件编译(或转换)为 JavaScript:

 

$> coffee -c hello.coffee

结果获得了一个名为 hello.js 的文件。由于所得到的 JavaScript 脚本对于 Node 同样有效,因此我可以直接在我的 Node 环境中运行它:


清单 2. 在 Node 中运行 JavaScript
 

$> node hello.js hello coffee!

此外,我还可以使用 coffee 命令来运行原始的 .coffee 文件,如清单 3 所示:


清单 3. 在 Node 中运行 CoffeeScript
 

$> coffee hello.coffee hello coffee!

注意观察监控器工具 - watchr

开放源码社区制作了大量便捷的文件监控器实用工具,能够完成运行测试、编译代码等任务。这些工具通常是通过命令行工作的,属于极为轻量级的工具。我们将配置监控器工具,用它来监控我们的开发环境中的所有 .coffee 文件,并在保存时将其编译为 .js 文件。

在实现这个目标时,我喜欢使用的实用工具是 watchr,这是一个 Ruby 库。为了使用 watchr,您的开发环境中需要安装 Ruby 和 RubyGems。在安装完成之后,即可运行以下命令,将 watchr 安装为全局 Ruby 库(包括相应的实用工具):

 

$> gem install watchr

在 watchr 中,您使用正则表达式定义要监视的文件,以及应该对其执行的操作。以下命令将 watchr 配置为编译在 src 目录中找到的全部 .coffee 文件:

 

watch('src/.*.coffee') {|match| system "coffee --compile --output js/ src/"}

请注意,本例中的 coffee 命令会将所得到的 .js 文件置于一个 js 目录内。

我可以在一个终端窗口中触发这项操作,例如:

 

$> watchr project.watchr

现在,只要我对 src 目录中的任何 .coffee 文件作出修改,watchr 都能确保创建一个新的 .js 文件,并将其放置在我的 js 目录中。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Grow your business fast with

Suku