93

Coffeescript看起来很酷。有人用过吗?它的优点和缺点是什么?

4

7 回答 7

113

我们已经开始在我们的产品中使用 CoffeeScript——一个非公开的网站,它基本上是一个用于浏览某些类型数据的应用程序。我们使用 CoffeeScript 作为命令行编译器(不是在服务器上,我们最终希望这样做)。

优点(对我们来说):

  • 它消除了 javascript 中的许多不必要的混乱(例如大括号、分号、一些括号),以至于代码比 javascript 更清晰、更容易理解
  • 代码行数比 javascript 少 20-30%(做完全相同的事情)
  • CoffeeScript 不仅消除了噪音,还添加了关键字、类和特性,如 heredocs,以使编码更清晰,更有趣
  • 鉴于前面的几点,一旦你学会了使用 CoffeeScript 编码,无疑会更快

缺点

  • 使用命令行编译器进行调试时,您在解决问题(javascript)时与编写修复程序(coffeescript)时正在查看不同的代码。然而,有点令人难以置信的是,我们的 CoffeeScript 非常棒,我们从来不需要调试它!

重要的是,我们可以随时回头。我们的coffeescript 编译器只是生成可读的javascript,所以如果有人改变主意或无法解决问题,那么我们可以退回使用coffeescript 生成的javascript - 并继续编码。

于 2010-07-20T05:09:02.143 回答
27

我们对 BusyConf 中的所有javascript 使用coffeescript。BusyConf 的很大一部分是在浏览器中运行的客户端应用程序,包括对离线模式的支持。

我们所有的咖啡脚本代码都经过全面测试。测试本身是用咖啡脚本编写的,并使用Qunit框架(用 javascript 编写)。我们还为 Qunit 框架编写了一个扩展,使测试更好。Qunit 扩展是用CoffeeScript编写的。我们的应用程序有一个用 CoffeeScript 编写的移动版本,它使用Sencha Touch框架(用 javascript 编写)。

从中得到的好处是,您可以在应用程序中自由混合 javascript 依赖项,但是您编写的所有代码(您的应用程序代码、测试等)都可以(并且应该!)是咖啡脚本。

于 2010-11-02T23:48:59.833 回答
24

差不多一年后,值得发布一些更新:

  1. Ruby on Rails 3.1 包含了官方的 CoffeeScript 支持,这意味着它将看到更多的实际应用。上个月我在 RailsConf 上做了一次演讲,大多数与会者之前没有听说过 CoffeeScript,而且——鉴于 dhh 的大力支持——都渴望参与其中。
  2. 有一本关于 CoffeeScript 的书,目前在电子书中,不久将在 The Pragmatic Bookshelf 上印刷。它被称为CoffeeScript: Accelerated JavaScript Development,它是真正属于你的。它基于 CoffeeScript 1.1.1。
  3. 在 1.0 和 1.1.1 之间的六个月里,语言实际上变化很小;几乎所有的更改都符合“错误修正”的条件。为了从 1.0.1 过渡到 1.1.1,我不得不对书中的代码进行很少的调整。但是,我确信该语言将来会发生更重大的变化。

CoffeeScript 项目的最权威列表在 CoffeeScript wiki 的In the Wild页面上。

我想说,到目前为止,CoffeeScript 的大部分生产用途都是与 Appcelerator 结合使用来创建 iPhone/Android 应用程序。(The Changelog 的 Wynn Netherland 模糊了我的书,将 CoffeeScript 描述为“我的 iOS、Android 和 WebOS 移动开发的秘密武器”),但在生产 Rails 应用程序中会有更多的用途——我希望在其他地方——在接下来的几个月里。

于 2011-06-05T20:08:12.980 回答
12

Coffeescript 用于 iPad 的 Ars Technica 阅读器http://arstechnica.com/apple/news/2010/11/introducing-the-ars-technica-reader-for-ipad.ars

于 2010-11-04T08:14:23.540 回答
10

这些天我真的很喜欢 Coffeescript。基本上整个HotelTonight iPhone 应用程序都是在其中编写的(使用 Appcelerator Titanium,它可以让您用 JavaScript 编写“本机”应用程序——它们不是 Web 应用程序,比如 Phonegap)。在这种情况下,我选择使用 Coffeescript,因为它使组织和维护大量 JS 变得容易得多。我还发现使用 Coffeescript(与 JavaScript 相比)编写代码更令人愉快。我们还在 Rails 应用程序中为 JS 使用 Coffeescript,但与整个手机应用程序相比,这是非常少/少量的代码。

优点主要与更好的语法有关,还在于它标准化了 OO 机制,然后添加了一些不错的附加功能(列表推导、一些范围内容等)。

对我来说,缺点几乎为零。第一个是它是一个额外的调试层。您将需要查看生成的 JS(非常易读且美观),然后将其映射到您的 Coffeescript 代码。对我们来说,这根本不是问题,而是 YMMV。

最后,我的看法是,在生产应用程序上使用它的风险为零,所以,不要让它成为障碍。那就去试试吧。用它编写一些代码,将其与您在 JS 中编写的内容进行比较,查看生成的代码,看看您是否能够根据调试需求阅读该代码。此外,在#coffeescript IRC 中闲逛,那里的人很好。最后,看看它将如何与您的应用程序集成,例如您的“构建”过程是什么(例如,对于 Rails,尝试 Barista,对于独立的东西,只需使用包含的“coffee -w”等)。

于 2011-03-18T19:02:06.920 回答
3

Coffeescript 真的只是让编写 JS 变得更容易。你最终会得到更干净、更高效的代码。

话虽如此,您仍然只能在 vanilla JS 中做任何可以做的事情。一旦你足够多地使用coffeescript,编写(好的)JS 确实会变得容易得多。

因此,如果您没有大量使用 JS,我建议您改为学习 coffescript。你会得到更好、更干净、错误更少的代码。如果您已经非常精通 JS,那么在“真正的”应用程序上开始使用咖啡脚本可能不是一个好主意。

(另外,coffeescript 确实让我有点恼火,因为它似乎鼓励了相当“浮夸”的代码。我不知道这是好事还是坏事,但这似乎是 TMTOWTDI 的一个极端案例)

于 2010-06-02T02:26:37.843 回答
3

请注意,尽管有编译器,但由于 JavaScript 的动态特性,您不会进行静态检查。如常见问题解答中所述:

静态分析

CoffeeScript 使用直接的源到源编译器。不执行类型检查,我们无法确定变量是否存在。这意味着如果没有代价高昂的运行时检查,我们就无法实现其他语言可以本地构建的特性。因此,任何依赖于这种分析的特征都不会被考虑。

IDE 支持不如 JavaScript 成熟(Cloud9 有语法高亮支持,但 Eclipse JSDT 有重构等等):https ://stackoverflow.com/questions/4084167/ide-or-its-add-in-for-coffescript - 编程

于 2011-08-11T10:12:58.697 回答