CoffeeScript 1.7 发布: 增加了无括号链式调用、多行字符串等特性

  • Burke Holland
  • 吴海星

2014 年 2 月 18 日

话题:JavaScript语言 & 开发

Jeremy Ashkenas 刚发布了CoffeeScript 的 1.7 版,并对流行的 JavaScript 转换做了一些备受期待的修改。

版本 1.7 中包含了一个非常受欢迎的语言特性请求,支持无括号链式调用。在 1.7 版之前,如果有开发者想要链接函数,则必须使用括号,而在 CoffeeScript 中,函数是没必要使用括号的。

// 1.7 之前 - 链式调用需要括号 
$('#element').addClass('active').css({ left: 5 });

// 1.7 - 没有括号了 
$ '#element'
.addClass 'active'
.css { left: 5 }

这一版还实现了对多行字符串的正确支持。在之前版本的 CoffeeScript 中,字符串(或字符串字面量)留下了新行和空格,而忽略了`\`操作符,这个符号的意思是要让两个字符串留在同一行上。在 1.7 版中,这个问题也被解决了,开发人员在 CoffeeScript 中可以清楚地格式化多行字符串了。

console.log '''The quick brown fox jumped over the \
lazy dog'''

// 1.7 版之前的输出 
 The quick brown fox jumped \nover the lazy dog

// 1.7 版现在的输出 
The quick brown fox jumped over the lazy dog

对数组解构的扩张也给加上了,这个之前曾经是 CoffeScript 项目中开放时间最长的问题

# 取得 animals 数组中的最后一项 
animals = [ 'cat', 'dog', 'hippopotamus' ]

# 1.7 版之前 
hippo = animals[animal.length - 1]

# 1.7 版现在的样子 
[..., hippo] = animals

# ... 两个都会被转换成...
hippo = animals[animals.length - 1];

还有更方便的数学操作符。包括新的平方操作符、向下取整除,以及一个模除操作符 (返回除法操作的余数)。

# 平方 
2 ** 2
# 转换成...
Math.pow(2, 2);

# 向下取整除 
2 // 3
# 转换成...
Math.floor(2 / 3)

# 模除 
2 %% 3
# 转换成...
var __modulo = function(a, b) { return (a % b + +b) % b; };
__modulo(2, 1);

其它改进包括让 CoffeeScript 跟 Node.js 保持一致,这样它的 require 语句不会自动运行一个目录中的每个文件,而是表现的像 Node 一样,只运行 index.coffee 文件。

1.7 版本发布的大部分工作 (实际上过去几年大部分的 CoffeeScript) 都是由社区成员完成的。" CoffeeScript 中合并了超过一百多个开发人员的贡献和补丁",Jeremy 说。" CoffeeScript 之所以乐于采用,是因为那些想法能够吸引 JavaScript 程序员。"考虑到Michael Srb 对 1.7 版本所作的贡献, Jeremy 对他致以了 特别的感谢

CoffeeScript 确实享有巨大的声望,达到了 GitHub 上最受欢迎的十大项目之一的高度。在 Ruby on Rails (自 3.1 版开始) 之类的框架中也出现到了对它的支持,微软的 Visual Studio 也通过Web Essentials 插件对它提供了支持。此外,JavaScript 的创建者Brenden Eich也曾表示过,CoffeeScript 在他思考JavaScript 的未来时产生了怎样的影响。

GitHub 用户stefanpenner 评论说在 CoffeeScript 中 “…ES6 import export 将会成为关键…”

Jeremy 确实在 CoffeeScript 的评述中提到了 ES6 的特性,

CoffeeScript 几乎要完成了— 过去两年到现在都十分稳定— 但将来还会继续有小幅度增长。比如说:有新的 JavaScript 特性出现时提供支持,进一步改进源码映射的支持, 为文学编程风格进一步打磨,让编译器内部更加精简。

曾经有个 Kickstarter 项目,它要重写 CoffeeScript 编译器。这个项目成功地募集到了资金,被称为CoffeeScriptRedux。Jeremy 认为有人为 CoffeeScript 创建新的编译器是好事, " 面向一种语言的编译器越多—那种语言越健康。CoffeeScript 也是,它能从多个独立的编译器中受益。"

你马上就可以在GitHub,或CoffeeScript 官方网站上得到 CoffeeScript 的 1.7 版。

原文英文链接:CoffeeScript 1.7 Released: Adds Chaining Without Parenthesis, Multiline Strings and More

JavaScript语言 & 开发