生成的CoffeeScript代码非常可读。
我们将其重新编译为JavaScript,并且非常容易浏览和调试。当我们移植该模块时,我们团队的另一位开发人员发现了一个错误。这两个开发人员修复了我们的旧JavaScript代码和CS编译器产生的新JavaScript代码中的错误。他们独立工作,大约花费了相同的时间(15-20分钟)。
由于这是一个端口,因此所生成的代码未使用适当或理想的Coffee特定功能。如果我们从头开始用CoffeeScript编写代码,那么代码将更加惯用。因此,我们决定不再移植现有代码。
通常,较短功能和较小对象的可读性有所提高。但是,对于更长的方法根本不是这样。最大的膨胀节省来自->
和显式return
,但除此之外,我们的代码没有显着缩短或简化。一些语法似乎很混乱,尤其是对象文字。CS省略了围绕成员定义的花括号,并与“一切都是表达式”和隐式结合在一起,return
这使得一些代码很难阅读。
这是JavaScript:
var rabbitGenerator = {
makeRabbit: function(rabbitName, growCarrots) {
if (growCarrots) {
carrots.growMore(10);
} else {
carrots.ensureSupply();
}
return {
name: rabbitName,
height: 0,
actions: {
jump: function (height) {
this.height += height;
},
eatCarrot: function () {
// etc
}
}
};
},
// more members
}
相应的CoffeeScript代码如下所示:
rabbitGenerator =
makeRabbit: (rabbitName, growCarrots) ->
if growCarrots
carrots.growMore 10
else
carrots.ensureSupply()
name: rabbitName // (*)
height: 0
actions:
jump: (height) ->
@height += height
eatCarrot: ->
到现在为止,很难弄清楚return语句从第几(*)
行开始。在我们的项目中,我们严重依赖对象文字:我们将它们作为函数参数传递,并从其他函数返回它们。在许多情况下,这些对象往往非常复杂:具有不同类型的成员和多层嵌套。在我们的案例中,总体感觉是,CoffeeScript代码实际上比纯JavaScript代码更难阅读。
尽管调试CoffeeScript的结果比我们预期的要容易,但编辑体验却下降了很多。我们找不到适合该语言的优秀编辑器/ IDE。对于项目的客户端代码,我们尚未在editor / IDE上进行标准化,实际上我们都使用了不同的工具。实际上,团队中的每个人都同意,当他们切换到CoffeeScript时,会从其工具获得相当差的支持。IDE和编辑器插件还处于初期阶段,在某些情况下甚至无法为我们提供适当的语法突出显示或缩进支持。不谈论代码片段或重构。我们使用WebStorm,Eclipse,NetBeans,VisualStudio,Notepad ++和SublimeText2。
说到工具,我应该提到CoffeScript编译器本身是作为Node JS包提供的。我们主要是Java / .NET商店,因此每个人都在Windows机器上进行开发。直到最近,Node几乎都不存在Windows支持。我们无法使CoffeeScript编译器在Windows上运行,因此暂时我们决定坚持使用<script type="text/coffeescript">
标签和基于浏览器的即时编译器。
编译器非常快,并且不会增加太多启动时间。不利之处在于,最终的JavaScript得到了eval
ed,并且在浏览器的开发人员工具(尤其是IE8)中很难在其中添加断点。如果调试时很麻烦,我们可以使用上面列出的迁移工具来预编译CoffeeScript代码,但这仍然不是很方便。
CoffeeScript的其他承诺,例如自动var
插入或this
使用胖箭头运算符(=>
)的半透明管理,都没有像我们希望的那样带来太多收益。我们已经将JSLint用作构建过程的一部分,并ES3 x ES5-Strict
使用该语言的子集编写代码。无论如何,Coffee产生相同类型的“干净”代码这一事实是一件好事。我希望每个服务器端框架也能产生有效的HTML5和CSS3标记!
就是说,我不会说CoffeeScript通过var
为我添加关键字来节省很多时间。var
JSLint容易捕获缺少的,并且很容易修复。而且,一旦被它纠正了一段时间,您还是会自动开始编写良好的JavaScript。因此,我不会说Coffee 在这方面真的有帮助。
我们对CoffeeScript进行了大约一周的评估。所有团队成员都在其中编写代码,我们彼此分享了经验。我们用它编写了一些新代码,并在合适时移植了一些现有代码。我们对这种语言的感觉参差不齐。