CoffeeScript 已死,CoffeeScript 万岁!
正如你可能已经听说的,JavaScript今年又准备推出一个新版本-ES6。这个名字源于它遵循了“ECMAScript”编码标准的第六个重要版本:ECMA-262。在这个期待已久的发布中,将包括一些对绝大多数JavaScript开发者处理问题大有裨益的新特性。
一些光芒四射的流行语……类、字符串插值、生成器函数、箭头函数、迭代器与for/of循环。这些都是具有重大意义的进步,但你可能也知道,这些特性中的许多或更多已经以CoffeeScript的形式存在了一段时间了,那是“一个被编译成JavaScript的小型语言”。
我使用CoffeeScript编码已经有一些年头。一个开发者在构建一个复杂的应用程序时,他必须在能够看到代码的同时,快速了解这段代码是做什么的。CoffeeScript让我在进行这些工作的时候比使用JavaScript时更加高效,我爱CoffeeScript,爱它因简介的语法而来的生产力提升,也爱它因视觉杂乱而来的自由。
ES6中新加入了很多好东西。但是,像一个被用水冲得过淡的美式咖啡,它还远没有对我的口味。作为一个CoffeeScript的粉丝,我很高兴听到一些我喜欢的CoffeeScript新特性(如箭头函数)现在被加入到了JavaScript中。然而,他们没有使用相同的灵活性去实现,还有其他的尴尬事情在里面。
CoffeeScript可以让你这么做:
solipsism = true if mind? and not world?
非常优雅是不是?在ES6中,你仍然不得不去处理那些畸形的东西,就像这样:
if ((typeof mind !== "undefined" && mind !== null) && (typeof world === "undefined" || world === null)) { solipsism = true; }
这还没完。在字符串插值中使用反撇号(`)还只是普通的怪异,圆括号和花括号在任何时候都是必需的。甚至是在星期日。
许多第一次尝试 CoffeeScript 的开发者会抱怨它的空格敏感特性。说实话,这家伙在一开始也坑了我几次。但我发现这些问题是很容易避免的,而且与这些小问题相比,更重要的是:我的代码能够始终远离分号,括号,·this·关键字的污染,就像在 AI Gore 会议上的丰田普锐斯。
ES6 中很多新特性明显受到 CoffeeScript 的启发。所以为何不敢拥抱这些变化?当前形式的 JavaScript 是由委员会设计的教科书式的样例软件,充斥着委员们冲突的意见和强烈的分歧。几年前,ES6 的开发前身:ES4,由于(委员们)在架构上的意见分歧和争论不得不被放弃。在这个委员会模式中,这个软件只有当每个人都厌倦了争论时才能发布。(委员会的)人们不情愿地妥协了,认输了,然后点了一份比萨庆祝他们的成果。
CoffeeScript 不会受到妥协的拖累。它是人们对于 JavaScript 能够是什么样的有点乌托邦式的愿景。这种狭窄的关注点大概是CoffeeScript获得如此两极分化名声的原因吧。开发者对它要么爱不释手,要么嗤之以鼻。如果你能够就它的表面价值而接受它,CoffeeScript 就已经出色地完成了它的使命了。
这是一次对“标准”的背离,就像最初的亮彩色的 iMac 一样,是对20世纪90年代时,那些清一色令人厌恶的灰褐色PC一次令人耳目一新的背离。一开始,人们强烈哭诉:“我没有软驱怎么活”。当然啦,每个人只有在经历了1个月左右的时间后,才会猛然意识到他们根本不需要软驱。哦,好像你口袋里平滑玻璃镜面的 Android 手机或者 iPhone 也是这样?我记得微软的 Steve Ballmer 曾大声宣称 iPhone 只是个玩具,“不可能”有市场——因为它没有所有‘正式’智能手机应该有的键盘。标准只有在它们自己的方向上足够纯粹,才是好的。
记住它是至关重要的,除非你正在使用汇编语言编程或者机器语言本身,但任何编程语言都是一种抽象。我们讨论的是,有多少抽象才是适量的,以及在我们的工作中应该有什么作用与实际上的标准相干。这基本上可能由个人来决定的,对于每位开发人员与每个团队来说,都没有对与错的答案。
对于我们的团队来说,这个问题主要是围绕在一个协同环境与我们想猛拉大马车,这种所谓的技术活中来关注诸多开发人员的工作。可以有把握的说,我们有一个正在进行的讨论。(诸多意见,对吗?)在坚持既定的标准之间,我们的团队正努力找到一种平衡,同时留有余地的提供给开发人员来创新和选择为他们工作的工具。
我想CoffeeScript可能会继续伴随着JavaScript,并推动JavaScript的创新。毕竟,这并不是一个非此即彼的命题。即使有一天CoffeeScript消失了,我想就像CoffeeScript一样的元编程语言(Metaprogramming Language)也会有很高的价值,因为它让程序员以一种新的方式去想象和理解他们的代码。这有助于提高每个人的艺术层次。
做一个善于交际的人,快来分享!