使用咖啡脚本的正确时间

Posted

技术标签:

【中文标题】使用咖啡脚本的正确时间【英文标题】:the right time to use coffeescript 【发布时间】:2012-05-04 23:57:49 【问题描述】:

所以基本上我有很多问题阻碍了我使用咖啡脚本:

    我还不是真正的 js 专家,即使我已经使用它大约 3 年了,但我仍然觉得我错过了一些重要的东西。因为它对我来说主要是一种支持性技术,所以我从来没有时间深入研究 js(我承认,这可能是一种错误的态度)。

    如果我开始使用coffeescript,我的js知识会变得更糟

    我不确定我是否真的可以信任 coffescript,即它编译成的 js 代码

    有时我不明白咖啡脚本编译成的 js 代码,甚至更糟 - 为什么会这样编译。

我想知道您对以上几点的看法。关键的是: 使用coffeescript 是如何影响你对js 的认识的?以及你认为在切换到coffeescript之前完全理解js有多重要?

【问题讨论】:

最好的问题应该是“5. 除了不可读的代码之外,咖啡脚本给我们什么” 如果你的工作/潜在工作需要你使用coffeescript,那么我想去吧。否则就用普通的js。 “我还不是真正的 js 专家” - 然后学习 JS。去拿一本书看。在您使用时尝试VaporJS。为什么要使用coffeescript遇到所有麻烦? 这就像涂上口红和假发然后去找你的父母告诉他们不要再叫你弗拉德,现在你是瓦伦蒂娜了。或者我讨厌 C++,所以我会用合成糖包裹它,让它看起来像 JS,因为我非常喜欢 JS 语法。可笑是无限的。 有趣的是,我们在 80 年代使用 C++ 学到了这些经验。起初是 cfront 将 C++ 转译成 C。但调试起来很痛苦。所以人们创建了本地 C++ 编译器 - gcc、cpp 等。我们再次经历它,尽管这次是(在我看来)比原始语言更糟糕的语言。 (我可能对 C++ 也有同样的看法,但至少它引入了重要的新功能——不管有没有好处,我都会留下来——而不是语法糖。) 【参考方案1】:

我认为这里要记住的关键是 Coffeescript 是 javascript。每个 Coffeescript 语句或魔术运算符在 Javascript 中都有不同的具体表示。例如,Coffeescript 中的 (x) -> x * x 将直接转换为 function (x) return x * x;

如果不知道它将生成的 Javascript,您就无法真正编写 Coffeescript。一方面,生成的 Javascript 是您必须调试的。如果有的话,我相信编写 Coffeescript 可能会提高你对 Javascript 的理解,因为它迫使你做出 Javascript 独有的决定。例如,在 Coffeescript 中,您决定使用 => 而不是 ->,实际上您正在决定是否要绑定 this - 这是一个非常真实的 Javascript 问题。

何时(或是否)开始使用 Coffeescript?我认为这个问题的答案或多或少取决于你。试试看,如果你觉得使用 Coffeescript 完成任务更容易,那就坚持下去。如果你发现很难用与运行的语言不同的语言编写代码(因此你必须调试的语言),然后回到 Javascript。

【讨论】:

【参考方案2】:

我想解决您的疑虑。

1) 如果你已经使用 JS 三年了,你可能对 JS 有相当扎实的了解。如果您还没有获得扎实的理解,那么可能是时候用一本好的 JS 书籍来补充您的知识了。

2) Coffee-script 可能不会让你对 JS 的了解更差。您设计 Coffee-script 应用程序的方式与您设计 JS 应用程序的方式相同(大部分情况下),因此您获得的设计技能将会转移。在我看来,程序设计是编程最重要的方面。

3) 为什么不信任 JS?为什么您信任您使用的任何其他编译器/解释器/其他工具?我怀疑 Coffee-script 没有错误,但很多人将它用于多种目的。这意味着已经测试了大量的行为,通常是在生产环境中,所以您的用例可能已经过尝试和测试。

4) 当然,Coffee-script 生成的 JS 对你来说看起来很陌生,因为生成它的规则并没有优先考虑人类可读性。然而,阅读它会增加你对 JS 的了解,因为你会看到特殊编写的程序是如何运行的。这让我们回到第 1 点。

【讨论】:

我对你的答案投了赞成票,但我普遍认为人类可读性实际上是 CoffeeScript 编译器设计的优先事项(也许不是最高的)。我发现我不需要经常查看编译后的 JavaScript,但是当我这样做时,我可以毫不费力地将它与我的 CoffeeScript 的意图联系起来。也就是说,你关于阅读它增加 JavaScript 知识的观点是很好的......你的答案的其余部分也是如此。 +1 也在这里,但我也不同意外国的外观/不可读的观点。 Coffeescript 对它如何转换为 Javascript 有非常明确的规则,并且很容易识别编译后的代码。规则就在那里,在coffeescript.org的首页上【参考方案3】:

以下是我对这个话题的看法:

    JS 不是支持技术(支持什么?)。它是一种主要用于前端的语言,并且有一种在后端使用它的新趋势。由于浏览器本身不支持 CoffeeScript,除非您将其用作后端,所以我认为使用 CoffeeScript 没有意义。虽然学习新语言总是一个好主意。

    一点也不。实际上使用 CoffeeScript 就像使用不同的语言。学习一个不会让你在另一个方面变得更笨。除非你停止学习另一个。

    没有证据表明 CoffeeScript 可以编译为错误或慢速代码。实际上,我使用 CoffeeScript 有一段时间了,但没有观察到任何性能下降。

    其实你不需要理解为什么它会这样编译。如果您在后端使用 CoffeeScript,那么您甚至不必查看它编译成的代码(您只需要源代码)。至于使用它来制作浏览器脚本,那么是的 - 使用它可能有点困难(调试)。这就是为什么我总是建议为浏览器编写普通 JavaScript 并在后端使用 CoffeeScript。

现在关于最后一个问题:我认为 CoffeeScript 根本不会影响我的 JS 知识。我将它们视为不同的语言。此外,除非您想在前端使用 CoffeeScript,否则您无需了解 JS 即可切换到 CoffeeScript(尽管您应该)。

无论如何,掌握 JavaScript总是是个好主意。 :)

【讨论】:

【参考方案4】:

您应该了解 Coffeescript 应该解决的问题。 为此,您应该对 javascripts 的“坏部分”有基本的了解。 我建议阅读 Douglas Crawford 的相关内容(有一本书,但互联网上也有很多资源。只需谷歌“javascript bad parts”)。 基本上,这个想法是“在所有那些笨拙的大括号和分号之下,JavaScript 的核心始终有一个华丽的对象模型。CoffeeScript 试图以一种简单的方式展示 JavaScript 的优点。” (取自 coffeescript 的网站)。

有一个工具可以帮助程序员避免 JavaScript 陷阱,称为 jslint。 该工具会分析您的代码并针对常见错误给出警告,例如全局变量、分号插入、命名空间污染等...

Coffeescript 转换为 javascript。但它生成的 javascript 是一个规范的子集,与 jslint 高度兼容。 更重要的是,它会生成适用于所有浏览器的 javascript 代码。 所以它不仅仅是一个很好的语法糖层,它确实有助于生成可靠的代码。

【讨论】:

以上是关于使用咖啡脚本的正确时间的主要内容,如果未能解决你的问题,请参考以下文章

使用 karma 持续编译和运行我的咖啡脚本测试

使用需要 grunt 找不到模块“咖啡脚本”

咖啡脚本:使用“构造”字符串调用方法

冰咖啡脚本是支持还是将支持承诺?

rails,使用咖啡脚本出现语法错误

我使用咖啡脚本的 ajax 帖子未处理成功回调