我已经写了近10年的 JavaScript 代码了,对 JavaScript 的语法已经非常熟悉了,但当我某一天忽然见到 CoffeeScript 的时候,却一见钟情,为什么呢?
JavaScript 陷阱
JavaScript 让人又爱又恨,因为它独特,卓越,而且不可或缺。JavaScript 现在如日中天, 未来发展更是不可小觑。 但毕竟它的设计非常仓促, 有些陷阱, 有些晦涩。当定义变量没有加 var 关系字在前面的时候,当前的变量就是全局的啦,这是一个很大的陷阱。
JavaScript 没有美感
- JavaScript 是函数式语言;
- 是基于 prototype 实现的面向对象语言;
- 是动态语言, 更像 Lisp 而非 C/Java ; 但却使用了 C/Java 的语法;
- 名字里面叫 Java, 其实和 Java 根本不搭边;
结论就是JavaScript的诞生是个悲剧. 它是函数式+动态语言的优秀内核, 却硬被绑上了C/Java的语法。也许是为了站在巨人的肩膀上进行推广的原因这样子设计,所以在语法上非常别扭。
CoffeeScript 简洁
CoffeeScript 的最大功绩, 就是将 JavaScript 硬绑的 C/Java 语法抛弃了; 改为采用类似 Ruby/Python 的语法. Ruby/Python 本来就是深受 Lisp 影响的, 和 JavaScript 算是同门师兄, 他们的语法经过了实践考验, 是更适合函数式+动态语言内核的。
CoffeeScript 只使用了 JavaScript 的”Good Parts(精粹)”, 抛弃了原来 JavaScript 晦涩的,容易出问题的那部分东西. 比如, 全局变量声明, with 啥的。
CoffeeScript提供了很多语法糖, 让代码更优雅可读. 去主页仔细看看CoffeeScript的语法清单, 就会发现边边角角到处是创新. 这让编程语言真的成了开发者的朋友, 而不是机器的朋友.
CoffeeScript 还提供了一个机会, 让你现在就可以使用 ECMAScript6 里面的特性. 将来有个更多新特性, CoffeeScript 也有机会在浏览器支持之前实现它们. 程序员面对的是 CoffeeScript 的优雅接口, 它是程序员和 JavaScript 之间的中间层, 脏活累活它都干了。
如何快速适应 CoffeeScript
coffeescript 在设计思想上有很多和 JavasScript 不一样的地方,例如,几乎所有的语句都可以看做表达式、函数的返回值、this 的绑定、Destructuring Assignment 等等。如果还是以 JavaScript 的思维来写 coffeescript 的话,就不能发挥 coffeescript 的优势了。
有一个工具 js2coffee 可以帮助你把 JavaScript 转换为 CoffeeScript 代码,你可以快速掌握JavaScript 与 CoffeeScript 的关系。
阅读 CoffeeScript 相关的文档,我很喜欢下面的这个 pdf 文档:
另外就是多阅读优秀的开源代码,如静态网页生成器 Wintersmith。我用 CoffeeScript 写的项目 Layout box 也可以参考。