什么是 CoffeeScript?
CoffeeScript 是一门编译到 JavaScript 的小巧语言. 在 Java 般笨拙的外表下, JavaScript 其实有着一颗华丽的心脏. CoffeeScript 尝试用简洁的方式展示 JavaScript 优秀的部分。
CoffeeScript 的指导原则是: "她仅仅是 JavaScript". 代码一一对应地编译到 JS, 不会在编译过程中进行解释. 已有的 JavaScript 类库可以无缝地和 CoffeeScript 搭配使用, 反之亦然. 编译后的代码是可读的, 且经过美化, 能在所有 JavaScript 环境中运行, 并且应该和对应手写的 JavaScript 一样快或者更快。
—— http://coffeescript.cn
为什么要用CoffeeScript?
- 更少,更紧凑,和更清晰的代码;
- 通过规避和改变对 JavaScript 中不良部分的使用,只留下精华,让代码减少出错率,更容易维护;
- 在很多常用模式的实现上采用了 JavaScript 中的最佳实践;
- CoffeeScript生成的JavaScript代码都可以完全通过JSLint的检测。
什么是 ES6?
ECMAScript 6.0(简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
标准的制定者有计划,以后每年发布一次标准,使用年份作为版本。因为ES6的第一个版本是在2015年发布的,所以又称ECMAScript 2015(简称ES2015)
—— http://es6.ruanyifeng.com/#docs/intro
为什么替代?
有很多人发文表达对于三种正在热点上的编译到 Javascript 的语言的看法(这三种分别是 ES6,CoffeeScript 和 TypeScript):
- Replace CoffeeScript with ES6
-
Don’t Replace CoffeeScript with ES6 Transpilers
- Goodbye CoffeeScript, Hello TypeScript
- CoffeeScripters, Have You Tried ES6 Yet?
可以看到 CoffeeScript 是一片唱衰的局面,究其原因,也可以参考尤小右在知乎上的发言。
作者:尤雨溪
链接:https://www.zhihu.com/question/22323967/answer/21015056
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
曾经用了大概一个礼拜左右,后来换回来了 。个人觉得CS的一些语法简化还是不错的(尤其是array comprehension和arrow function),但同时还引入了一些semantic上的不同,掩盖了很多JS本身的东西。比如用class掩盖了构造函数和原型链,把JS的原型继承硬套上了OO的外衣。还有一些不太明显的行为上的差异,比如variable shadowing(因为不用var所以在一个函数里没法覆盖同名的外层变量),implicit return(总是会返回最后一个expression的值)之类。另外就是有时候能省括号有时候又不能省... 这些问题导致我在写CS的时候会无法遏制地在脑子里把写下来的CS人工编译成JS... 时间长了感觉比写原生JS还累。
也就是说如果你深入了解并习惯了JS的各种细节之后,换到CS反而会带来一层额外的思考负担。这种情况在长期以JS作为主力语言的开发者身上比较常见。相比之下,新手、从其他语言转过来的、或者是主力语言不是JS并且没有也不想去了解JS各种坑的开发者会比较容易接受CS(我估计CS的一大部分用户都是rails开发者)。
另一方面就是生态圈上的原因:CS的项目接到Pull Request的概率会低很多(写CS的会愿意开JS项目的PR,但写JS的一般不乐意开CS项目的PR),不利于开源协作。
Ruby on Rails 开发框架默认用 CoffeeScript , 其为 RoR 开发带来了效率和代码可读性的大幅提升,Coffeescript 编程类似 Ruby 语法,使其作为 Ruby on Rails 开发者来说入门难度不高,但要熟练运用还需练习。正如上面尤小右所说的一样,写 CoffeeScript 的人绝大多数都是 Rails 开发者。
本人作为一个使用 Ruby 的开发者自然会接触到 CoffeeScript,不过对于这种简化开发,为了少写代码而少些代码的东西确实有些无法接触,或许正如上面尤小右所说的一样,我之前写过很长时间的 Javascript(或者说 jQuery),在写 CoffeeScript 的时候有一层额外的思考负担,感觉比写原生 JS 还累(有类似想法的除了 CoffeeScript 之外,还有 Ruby on Rails 的模板引擎 slim ,所以一直坚守 Rails 自带的模板 ERB)。所以当听说 Ruby on Rails 已经可以使用 ES6 代替 CoffeeScript 并且可以和 Assets Pipeline 一起使用,就迫不及待的想要试一下,虽然相关的 Gem 包都还没有发布 stable 版本。