CoffeeScript?TypeScript?還是JavaScript
請(qǐng)注意本文只是我的偏見,我努力地理解借助CoffeeScript或TypeScript之類的編譯器寫JavaScript代碼的理由。靜態(tài)編譯、強(qiáng)類型語言和框架,我有著這些流行的、豐富的背景。我的上一份工作就是使用TypeScript,因?yàn)槲也坏貌皇褂谩D鞘且欢尾豢鞓返臅r(shí)光,我將因此而離開。
我很幸運(yùn)地把自己從這種困境和負(fù)擔(dān)中釋放出來,正在完全地使用JavaScript編寫代碼,我對(duì)此感到格外高興!如果我對(duì)于這種變化的熱情還不夠明顯,請(qǐng)讓我向你保證,我現(xiàn)在更開心了。有一點(diǎn)很重要,我不是在暗示靜態(tài)編譯或強(qiáng)類型語言有什么錯(cuò)誤,因?yàn)樗隙]錯(cuò)。它只不過不再是我的菜了。
鑒于JavaScript的動(dòng)態(tài)本性以及缺乏靜態(tài)類型檢查,我可能編寫著低質(zhì)量代碼,充斥著bug卻不能在編譯時(shí)發(fā)現(xiàn),對(duì)嗎?答案是毫不含糊的,不對(duì)!我從來不能這樣有動(dòng)力、多產(chǎn)、富有表現(xiàn)和高效。我沒有編寫過最少bug的高質(zhì)量代碼,也不能在發(fā)現(xiàn)bug后快速修復(fù)。或許你想知道,我是否在編寫風(fēng)格統(tǒng)一的JavaScript,它們遵循最佳實(shí)踐和風(fēng)格,卻沒有編譯器?答案是,對(duì)的!我不是故意在這里鼓吹自己,而是要指出,靜態(tài)編譯的缺乏不一定會(huì)導(dǎo)致更多的bug和低質(zhì)量的代碼。
的確,有很多方法來確保JavaScript代碼被正確地編寫、遵循推薦的風(fēng)格和最佳實(shí)踐。更不要說編寫高質(zhì)量JavaScript成為了第二天性,自然地,你傾向于遵循你學(xué)到的、同樣優(yōu)秀的模式。你還應(yīng)該總是編寫合適的單元測試,這是一種最佳實(shí)踐和另一種應(yīng)對(duì)bug的防御,有助于確保預(yù)期的功能。我們不要忘了,合適的代碼審核也是一種最佳實(shí)踐,應(yīng)該去用。
那么,為什么要用這些編譯器,好處又是什么呢?答案是,我也不知道。是不是應(yīng)該有可以編譯成Ruby和Python的RubyScript和PythonScript呢?在我看來,如果你不喜歡、或者不想編寫JavaScript代碼,那么你可能就不應(yīng)該做一名JavaScript開發(fā)人員。它是古怪的、不完美的語言?它絕對(duì)是,但是它一直在變得更好。大部分的怪癖和遺漏在ECMAScript Harmony【注1】中提出了,比如:ES.next。
我認(rèn)為使用某種編譯器只有一個(gè)原因,那就是,如果你是高級(jí)專家、JavaScript大拿,不喜歡原生JavaScript,只是想簡單快捷地做些東西。如果你不是剛才提到的專家,那么我真地相信你只是在傷害自己而逃避原生JavaScript。你干嘛這么問?答案是,JavaScript正變得無處不在,成為莊重的、令人驚嘆的語言。它已經(jīng)融入了所有的web和移動(dòng)環(huán)境、使用Node.js的服務(wù)器,還有數(shù)據(jù)庫(比如MongoDB),甚至最近的硬件級(jí)別的處理(比如arduino)。
我讀了很多博客、newsletter、書、文章、論文、文檔、MDN等與JavaScript相關(guān)的東西。它們都包含了用原生JavaScript編寫的代碼,我很少看到作者用CoffeeScript或類似語言呈現(xiàn)的代碼,在極少場合碰到這些代碼時(shí),我會(huì)立即停止閱讀,因?yàn)槲抑粚?duì)JavaScript、而不是它的其它版本感興趣。
如果你曾經(jīng)計(jì)劃、或者有興趣在工作中用到基于JavaScript的數(shù)據(jù)庫(比如MongoDB),那么你需要知道如何編寫JavaScript。你不能用CoffeeScript來查詢MongoDB,也不能沒有預(yù)編譯就用CoffeeScript為Node.js編寫基于服務(wù)器端的JavaScript,即使你有能力,也不能這樣做。
在GitHub上,如潮水般涌來的、表面上有數(shù)百萬種的JavaScript資源庫和框架,該怎么樣呢?大型的有jQuery、AngularJS、Underscore等等。我強(qiáng)烈推薦深入學(xué)習(xí)JavaScript,這樣你不僅能夠閱讀和理解源代碼,還可以調(diào)試它。是的,說到了調(diào)試,不管是你是在瀏覽器,還是使用Webstorm為Node.js調(diào)試JavaScript,都會(huì)涉及到原生JavaScript。
我最后想指出的是與其他人的協(xié)作(比如GitHub),或者找一份JavaScript工作室的工作。如果順利的話,掌握原生JavaScript的好處應(yīng)該比較明顯。當(dāng)你入職第一天走進(jìn)嚴(yán)肅的JavaScript工作室、提出CoffeeScript編譯器的問題,你能夠想象得到這是什么情景嗎?
重申,如果你是高級(jí)專家JavaScript大拿,那么編譯器可能就是好的嗎?盡管如此,我懷疑你會(huì)不會(huì)成為這樣的大拿,如果你因?yàn)榍嗖A某種編譯器而避免學(xué)習(xí)、編寫原生JavaScript的話。如果你擔(dān)心靜態(tài)檢查和風(fēng)格,可以嘗試一些構(gòu)建工具(比如,Grunt、Gulp、Node、NPM等)。很多插件運(yùn)行非常不錯(cuò)。對(duì)于既定代碼,使用CoffeeScript或TypeScript是為了查看編譯好的JavaScript,然后模擬原生代碼的輸出。無論怎樣,幫自己一個(gè)忙,優(yōu)先掌握J(rèn)avaScript。
注1:ECMAScript Harmony將會(huì)以“ECMAScript 6”發(fā)布。http://zh.wikipedia.org/wiki/ECMAScript
原文:http://innoarchitech.com/coffeescript-typescript-javascript/ 翻譯:labazhou
相關(guān)文章:
1. JavaWeb Servlet中url-pattern的使用2. 淺談SpringMVC jsp前臺(tái)獲取參數(shù)的方式 EL表達(dá)式3. asp(vbscript)中自定義函數(shù)的默認(rèn)參數(shù)實(shí)現(xiàn)代碼4. React優(yōu)雅的封裝SvgIcon組件示例5. 輕松學(xué)習(xí)XML教程6. php網(wǎng)絡(luò)安全中命令執(zhí)行漏洞的產(chǎn)生及本質(zhì)探究7. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)8. jsp中sitemesh修改tagRule技術(shù)分享9. ASP基礎(chǔ)知識(shí)VBScript基本元素講解10. 詳解瀏覽器的緩存機(jī)制
