CoffeeScript?TypeScript?還是JavaScript

labazhou發表於2014-11-27

  請注意本文只是我的偏見,我努力地理解藉助CoffeeScript或TypeScript之類的編譯器寫JavaScript程式碼的理由。靜態編譯、強型別語言和框架,我有著這些流行的、豐富的背景。我的上一份工作就是使用TypeScript,因為我不得不使用。那是一段不快樂的時光,我將因此而離開。

  我很幸運地把自己從這種困境和負擔中釋放出來,正在完全地使用JavaScript編寫程式碼,我對此感到格外高興!如果我對於這種變化的熱情還不夠明顯,請讓我向你保證,我現在更開心了。有一點很重要,我不是在暗示靜態編譯或強型別語言有什麼錯誤,因為它肯定沒錯。它只不過不再是我的菜了。

  鑑於JavaScript的動態本性以及缺乏靜態型別檢查,我可能編寫著低質量程式碼,充斥著bug卻不能在編譯時發現,對嗎?答案是毫不含糊的,不對!我從來不能這樣有動力、多產、富有表現和高效。我沒有編寫過最少bug的高質量程式碼,也不能在發現bug後快速修復。或許你想知道,我是否在編寫風格統一的JavaScript,它們遵循最佳實踐和風格,卻沒有編譯器?答案是,對的!我不是故意在這裡鼓吹自己,而是要指出,靜態編譯的缺乏不一定會導致更多的bug和低質量的程式碼。

  的確,有很多方法來確保JavaScript程式碼被正確地編寫、遵循推薦的風格和最佳實踐。更不要說編寫高質量JavaScript成為了第二天性,自然地,你傾向於遵循你學到的、同樣優秀的模式。你還應該總是編寫合適的單元測試,這是一種最佳實踐和另一種應對bug的防禦,有助於確保預期的功能。我們不要忘了,合適的程式碼稽核也是一種最佳實踐,應該去用。

  那麼,為什麼要用這些編譯器,好處又是什麼呢?答案是,我也不知道。是不是應該有可以編譯成Ruby和Python的RubyScript和PythonScript呢?在我看來,如果你不喜歡、或者不想編寫JavaScript程式碼,那麼你可能就不應該做一名JavaScript開發人員。它是古怪的、不完美的語言?它絕對是,但是它一直在變得更好。大部分的怪癖和遺漏在ECMAScript Harmony【注1】中提出了,比如:ES.next。

  我認為使用某種編譯器只有一個原因,那就是,如果你是高階專家、JavaScript大拿,不喜歡原生JavaScript,只是想簡單快捷地做些東西。如果你不是剛才提到的專家,那麼我真地相信你只是在傷害自己而逃避原生JavaScript。你幹嘛這麼問?答案是,JavaScript正變得無處不在,成為莊重的、令人驚歎的語言。它已經融入了所有的web和移動環境、使用Node.js的伺服器,還有資料庫(比如MongoDB),甚至最近的硬體級別的處理(比如arduino)。

  我讀了很多部落格、newsletter、書、文章、論文、文件、MDN等與JavaScript相關的東西。它們都包含了用原生JavaScript編寫的程式碼,我很少看到作者用CoffeeScript或類似語言呈現的程式碼,在極少場合碰到這些程式碼時,我會立即停止閱讀,因為我只對JavaScript、而不是它的其它版本感興趣。

  如果你曾經計劃、或者有興趣在工作中用到基於JavaScript的資料庫(比如MongoDB),那麼你需要知道如何編寫JavaScript。你不能用CoffeeScript來查詢MongoDB,也不能沒有預編譯就用CoffeeScript為Node.js編寫基於伺服器端的JavaScript,即使你有能力,也不能這樣做。

  在GitHub上,如潮水般湧來的、表面上有數百萬種的JavaScript資源庫和框架,該怎麼樣呢?大型的有jQuery、AngularJS、Underscore等等。我強烈推薦深入學習JavaScript,這樣你不僅能夠閱讀和理解原始碼,還可以除錯它。是的,說到了除錯,不管是你是在瀏覽器,還是使用Webstorm為Node.js除錯JavaScript,都會涉及到原生JavaScript。

  我最後想指出的是與其他人的協作(比如GitHub),或者找一份JavaScript工作室的工作。如果順利的話,掌握原生JavaScript的好處應該比較明顯。當你入職第一天走進嚴肅的JavaScript工作室、提出CoffeeScript編譯器的問題,你能夠想象得到這是什麼情景嗎?

  重申,如果你是高階專家JavaScript大拿,那麼編譯器可能就是好的嗎?儘管如此,我懷疑你會不會成為這樣的大拿,如果你因為青睞某種編譯器而避免學習、編寫原生JavaScript的話。如果你擔心靜態檢查和風格,可以嘗試一些構建工具(比如,Grunt、Gulp、Node、NPM等)。很多外掛執行非常不錯。對於既定程式碼,使用CoffeeScript或TypeScript是為了檢視編譯好的JavaScript,然後模擬原生程式碼的輸出。無論怎樣,幫自己一個忙,優先掌握JavaScript。

  注1:ECMAScript Harmony將會以“ECMAScript 6”釋出。http://zh.wikipedia.org/wiki/ECMAScript

  原文:http://innoarchitech.com/coffeescript-typescript-javascript/ 翻譯:labazhou

相關文章