Coffeescript看起来很酷。有人用过吗?它的优点是什么?缺点
答案 0 :(得分:113)
我们已经开始在我们的产品中使用CoffeeScript - 一个非公开的网站,它基本上是一个用于浏览某些类型数据的应用程序。 我们使用CoffeeScript作为命令行编译器(不在服务器上,我们最终想做)。
重要的是,我们可以随时回头。我们的coffeescript编译器只是生成可读的javascript,所以如果有人改变主意或无法解决问题,那么我们可以回过头来使用coffeescript生成的javascript - 并继续编码。
答案 1 :(得分:27)
我们在BusyConf中使用coffeescript作为所有的javascript。 BusyConf的很大一部分是以浏览器运行的客户端应用程序,包括对离线模式的支持。
我们所有的coffeescript代码都经过全面测试。测试本身是用coffeescript编写的,并使用Qunit框架(用javascript编写)。我们还编写了Qunit框架的扩展,使测试更好。 Qunit扩展名用CoffeeScript编写。我们的应用程序有一个用CoffeeScript编写的移动版本,它使用Sencha Touch框架(用javascript编写)。
从中可以看出,您可以在应用程序中自由混合javascript依赖项,但您编写的所有代码(您的应用程序代码,测试等)都可以(而且应该!)是coffeescript。
答案 2 :(得分:24)
差不多一年之后,值得发布一些更新:
最确定的CoffeeScript项目列表位于CoffeeScript wiki的In the Wild页面上。
我想说到目前为止,CoffeeScript的大部分制作用途都是与Appcelerator一起创建iPhone / Android应用程序。 (The Changelog的Wynn Netherland通过将CoffeeScript描述为“我的iOS,Android和WebOS移动开发的秘密武器”来模糊我的书,但是在生产Rails应用程序中会有更多的用途 - 我希望,在其他地方 - 在接下来的几个月里。
答案 3 :(得分:12)
Coffeescript用于iPad的{Ars Technica阅读器http://arstechnica.com/apple/news/2010/11/introducing-the-ars-technica-reader-for-ipad.ars
答案 4 :(得分:10)
这些天我真的很喜欢Coffeescript。基本上整个HotelTonight iPhone应用程序都写在其中(使用Appcelerator Titanium,它允许您在JavaScript中编写“本机”应用程序 - 它们不是Web应用程序,比如Phonegap)。在这种情况下,我选择使用Coffeescript,因为它使组织和维护大量的JS变得更加容易。我还发现使用Coffeescript(与JavaScript)编写代码会更加愉快。我们还在我们的Rails应用程序中使用Coffeescript作为JS,但这是与整个手机应用程序相关的极小/少量代码。
专业人员通常只是做一个更好的语法,但它也标准化了一个OO机制,然后添加了一些不错的补充(列表推导,一些范围等等)。
对我来说,缺点几乎为零。主要的是它是一个额外的调试层。您需要查看生成的JS(非常易读且很好),然后将其映射到您的Coffeescript代码。对我们来说,这根本不是问题,而是YMMV。
最后,我认为,在生产应用程序中使用它的风险为零,因此,不要让它成为阻止程序。然后,去尝试一下。用它编写一些代码,将它与你在JS中编写的代码进行比较,查看生成的代码,看看你是否因为能够读取调试需求而感到舒服。此外,在#coffeescript IRC中闲逛,人们在那里很好。最后,看看它如何与您的应用集成,例如什么是你的“构建”过程(例如对于Rails,尝试Barista,对于独立的东西,只需使用包含的“coffee -w”等)。
答案 5 :(得分:3)
Coffeescript真的让你更容易编写JS。最终得到更干净,更高效的代码。
话虽这么说,你仍然可以做任何你可以做的香草JS。一旦你足够使用coffeescript,编写(好)JS就会变得容易多了。
所以如果你没有使用过JS,我建议学习coffescript。你会得到更好,更清洁,更少的错误代码。如果你已经非常流利的JS,那么在“真正的”应用程序上开始使用coffeescript可能不是一个好主意。
(另外,coffeescript确实让我感到烦恼,因为它似乎鼓励相当“泛滥”的代码。我不知道这是好事还是坏事,但它似乎是TMTOWTDI的极端情况)
答案 6 :(得分:3)
请注意,尽管存在编译器,但由于JavaScript的动态特性,您无法进行静态检查。如FAQ中所述:
静态分析
CoffeeScript使用直接的源到源编译器。没有类型 执行检查,如果变量存在,我们就无法计算出来 或不。这意味着我们无法实现其他功能 语言可以本地构建,无需昂贵的运行时检查。作为一个 结果,任何依赖于这种分析的特征都不会 考虑。
IDE支持不如JavaScript成熟(Cloud9具有语法高亮支持,但Eclipse JSDT具有重构和更多):https://stackoverflow.com/questions/4084167/ide-or-its-add-in-for-coffescript-programming