读书人

利用 CoffeeScript 跟 Node 进行函数式

发布时间: 2012-07-04 19:33:54 作者: rapoo

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

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


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

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


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


这里,我在 CoffeeScript 中声明了一个简单的函数,将某个词的首字母大写。在 CoffeeScript 中,函数定义的语法紧接一个箭头之后。主体部分也是使用空格分隔的,因此 CoffeeScript 没有花括号。另外还要注意这里没有使用圆括号。CoffeeScript 的?word.slice 1?将编译为 JavaScript 的?word.slice(1)。同样,请注意函数的主题部分也是使用空格分隔的:函数定义行下的所有代码均缩排。下方未缩排的?console.log?表示方法的定义已完整。(CoffeeScript 的这两项特性分别借鉴自 Ruby 和 Python。)

您可能希望了解对应的 JavaScript 函数是怎样的,清单 5 就给出了对应的 JavaScript 代码:


清单 5. 即便是 JavaScript 的单行代码也是非常复杂的

清单 7 展示了对应的 JavaScript 脚本对这种默认参数值的处理方法:


清单 7. 杂乱的 JavaScript


在清单 8 中,我利用了???操作符来测试条件的存在与否。在尝试将一个词的首字母转为大写之前,这段脚本将确保参数?word?不是null,同时保证它确属?string?类型。CoffeeScript 的出色之处在于允许您使用?is?来取代?==


在 CoffeeScript 中重新编写相同的 Web 应用程序,消除 Node 回调的复杂语法,如清单 11 所示:


清单 11. CoffeeScript 简化了 Node.js

在?清单 11?中,我添加了一个?or?操作符,取代了 JavaScript?||。此外,我还发现,使用箭头来表示?app.listen?中的匿名函数比直接键入?function()?更容易。

结束语

CoffeeScript 给 JavaScript 编程注入了新鲜感,也简化了 JavaScript 编程,因此任何用户都能够轻松上手,尤其是熟悉 Ruby 或 Python 的用户。在本文中,我展示了 CoffeeScript 如何通过借鉴这些语言,使 JavaScript 风格的代码更易于阅读,同时还能显著加快编写过程。正如我所演示的那样,将 CoffeeScript、Node 与 Underscore 相结合,即可得到超轻量级的有趣开发堆栈 (development stack),该堆栈适用于基本函数式编程场景。经过一段时间的练习,您就可以将本文所学知识作为基础,深入研究依靠动态 Web 和移动交互的更为复杂的业务应用程序。

读书人网 >编程

热点推荐