CoffeeScript是一套JavaScript的轉(zhuǎn)譯語(yǔ)言,創(chuàng)建者 Jeremy Ashkenas 戲稱(chēng)它是- JavaScript 的不那么鋪張的小兄弟。因?yàn)?CoffeeScript 會(huì)將類(lèi)似 Ruby 語(yǔ)法的代碼編譯成 JavaScript,而且大部分結(jié)構(gòu)都相似,但不同的是 CoffeeScript 擁有更嚴(yán)格的語(yǔ)法。
歷史:
2009 年 12 月 24 日, CoffeeScript 版本 0.0.1 被提交.
2010 年 12 月 24 日, CoffeeScript 發(fā)布 1.0.0 穩(wěn)定版.
功能:
語(yǔ)法:從 Lisp 系重生CoffeeScript打蛇打到七寸了. 它的最大功績(jī), 就是將 JavaScript 硬綁的 C/Java 語(yǔ)法拋棄了; 改為采用類(lèi)似 Ruby/Python 的語(yǔ)法. Ruby/Python 本來(lái)就是深受 Lisp 影響的, 和 JavaScript 算是同門(mén)師兄, 他們的語(yǔ)法經(jīng)過(guò)了實(shí)踐考驗(yàn), 是更適合函數(shù)式+動(dòng)態(tài)語(yǔ)言?xún)?nèi)核的.
Good Parts:CoffeeScript 只使用了 JavaScript 的 ”Good Parts(精粹)”, 拋棄了原來(lái) JavaScript 晦澀的,容易出問(wèn)題的那部分東西. 比如,全局變量聲明, with 等.
語(yǔ)法糖和 ECMAScript:CoffeeScript 提供了很多語(yǔ)法糖, 讓代碼更優(yōu)雅可讀. 去主頁(yè)仔細(xì)看看 CoffeeScript 的語(yǔ)法清單, 就會(huì)發(fā)現(xiàn)邊邊角角到處是創(chuàng)新. 這讓編程語(yǔ)言真的成了開(kāi)發(fā)者的朋友, 而不是機(jī)器的朋友.
CoffeeScript 還提供了一個(gè)機(jī)會(huì), 讓你現(xiàn)在就可以使用 ECMAScript 里面的特性. 將來(lái)有個(gè)更多新特性, CoffeeScript 也有機(jī)會(huì)在瀏覽器支持之前實(shí)現(xiàn)它們. 程序員面對(duì)的是 CoffeeScript 的優(yōu)雅接口, 它是程序員和JavaScript 之間的中間層, 臟活累活它都干了.
發(fā)展:
CoffeeScript 構(gòu)建在 JavaScript 上層, 這讓人聯(lián)想起 .Net 和 C#/F#/VB… , 以及 JVM 和 Java/JRuby/Scala…
在 JavaScript 上層做事情的, 不只 CoffeeScript, 還有很多其他的. 比如 Lua 就有通過(guò) LLVM 轉(zhuǎn)換成JavaScript 的實(shí)現(xiàn). 前段時(shí)間的 JavaScript PC 模擬器也證明了這種思路的威力.
也許 JavaScript 就是下一個(gè) JVM, 上面會(huì)有最適用于各種場(chǎng)景的各種語(yǔ)言. 很多人盼望 JavaScript 成為為未來(lái)的唯一語(yǔ)言, 看起來(lái)這是不切實(shí)際的幻想了.
為什么要用CoffeeScript?
更少,更緊湊,和更清晰的代碼
通過(guò)規(guī)避和改變對(duì)JavaScript中不良部分的使用,只留下精華,讓代碼減少出錯(cuò)率,更容易維護(hù)
在很多常用模式的實(shí)現(xiàn)上采用了JavaScript中的最佳實(shí)踐
CoffeeScript生成的JavaScript代碼都可以完全通過(guò)JSLint的檢測(cè)
什么情況下不推薦使用CoffeeScript?
CoffeeScript不是JavaScript的超集,也不是完全替代品,不應(yīng)該在不會(huì)JavaScript的情況下使用CoffeeScript工作
CoffeeScript是一種需要預(yù)編譯的語(yǔ)言,不能在運(yùn)行時(shí)(Runtime)解釋?zhuān)@造成了她普遍被人質(zhì)疑的一點(diǎn),就是如果代碼中出現(xiàn)運(yùn)行時(shí)錯(cuò)誤時(shí)難以調(diào)試,不過(guò)從實(shí)際使用上來(lái)看,因?yàn)镃offeeScript的編譯結(jié)果大部分情況下自然而合理,我們沒(méi)有發(fā)現(xiàn)從生成的JavaScript代碼回溯到對(duì)應(yīng)的CoffeeScript代碼有什么困難之處。
這種靜態(tài)編譯還有一個(gè)額外的好處,就是CoffeeScript和現(xiàn)有的環(huán)境(瀏覽器,Node,Rhino等)與庫(kù)完全兼容
最簡(jiǎn)單的安裝和測(cè)試CoffeeScript的方法,是使用*node.js*的*npm*安裝,然后使用命令行腳本實(shí)時(shí)編譯
npm install -g coffee-script
# watch and compile
coffee -w --output lib --compile src
這里假設(shè)你的coffee代碼在src目錄下,這個(gè)daemon會(huì)自動(dòng)檢測(cè)文件的改變,并編譯成js文件放到lib目錄下
代碼展示編輯
官方網(wǎng)站展示的代碼
#賦值:
number=42
opposite=true
#條件:
number=-42 if opposite
#函數(shù):
square=(x)->x*x
#數(shù)組:
list=[1,2,3,4,5]
#對(duì)象:
math=
root:Math.sqrt
square:square
cube:(x)->x*squarex
#Splats:
race=(winner,runners...)->
print winner,runners
#存在性:
alert"I knew it!" if elvis?
#數(shù)組推導(dǎo)(comprehensions):
cubes=(math.cube num for num in list)
更多建議: