CoffeeScript 已死,CoffeeScript 萬歲!

oschina發表於2015-04-21

正如你可能已經聽說的,JavaScript今年又準備推出一個新版本-ES6。這個名字源於它遵循了“ECMAScript”編碼標準的第六個重要版本:ECMA-262。在這個期待已久的釋出中,將包括一些對絕大多數JavaScript開發者處理問題大有裨益的新特性。

CoffeeScript 已死,CoffeeScript 萬歲!

一些光芒四射的流行語……類、字串插值、生成器函式、箭頭函式、迭代器與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)也會有很高的價值,因為它讓程式設計師以一種新的方式去想象和理解他們的程式碼。這有助於提高每個人的藝術層次。

做一個善於交際的人,快來分享!

相關文章