Javascript 不知道怎麼著突然紅了起來。所以有位神人就寫了一個東西,叫做 CoffeeScript,顧名思義,他是一種 script,然後可以讓你配著咖啡寫。或者是說,大概一杯咖啡的時間,可以寫好一些令人覺得繁雜的 Javascript。
是,他不是新的東西,他只是把 Javascript 重新包裝,換一個方式來作。
為什麼要這麼做?
首要目的,無非是省時間,第二就是,你可以少考慮一些事情,除非你比原作者還要熟悉 javascript 這件事情。其實市面上關於咖啡的文章太多了,我在這邊寫有點畫蛇添足。所以,我並不會介紹這是什麼,我只單就這個工具來說一些小小經驗談。
首先,他是一個跟 RailsRuby 或是 python 寫法或是部份用法相當類似的語言。所以,如果你是對於這兩者語言相當熟悉的人,對於 CoffeeScript 要上手應該也不是難事。當然,我對那兩個語言並不熟悉,所以要上手確實有點難度。
那,為什麼不直接寫 Javascript 就好?
大概是因為寫新的東西感覺比較潮,而且可以炫耀吧(喂
差別在哪裡?
這是一個簡單的 CoffeeScript,
a = [1,2,3,4]
for i in [0..(a.length-1)]
alert(a[i])
翻譯成 javascript 之後會變成這樣,
(function() {
var a, i, _ref;
a = [1, 2, 3, 4];
for (i = 0, _ref = a.length - 1; 0 <= _ref ? i <= _ref : i >= _ref; 0 <= _ref ? i++ : i--) {
alert(a[i]);
}
}).call(this);
你應該會問這什麼鬼啊!是,我當初從 javascript 轉換成 coffeescript 同樣也會有這個疑問。到底為什麼要這樣做呢?我們先來看看原來我想做什麼,
var a = [1,2,3,4];
for (var i = 0; i<a.length; i++) {
alert(a[i]);
}
還原來看原本的目的很單純,但是為什麼有個 _ref
他到底要作什麼呢?假設,我們故意的把 a
清空,那麼會有什麼結果?
是的,迴圈還是會被執行,而且會跳出兩次 undefined
的 alert!
其實我並不清楚到底為什麼要這樣做?可能是為了確保迴圈會被執行,不過因為這樣而跳出訊息感覺就是很奇怪。
易讀還是不易讀?
有了上述的例子,你覺得他是屬於易讀還是不易讀?其實,就某方面來說,他確實是易讀的,只要你不要回頭去讀編譯出來的 js 檔案就好。這樣很彆拗嗎?請看,
if my_name is "John"
alert("John")
這樣的 code
看起來是不是簡單易懂?編譯起來就是,
if (my_name === "John") alert("John");
所以,就某方面來說,其實他還蠻容易理解的。所謂不容易理解的地方,大概就像是這個樣子吧,底下是官方的一個例子,
solipsism = true if mind? and not world?
編譯起來大概是這樣,
var solipsism;
if ((typeof mind !== "undefined" && mind !== null) && !(typeof world !== "undefined" && world !== null)) {
solipsism = true;
}
編譯結果其實與我們預期的差不多。所以,對於 CoffeeScript 的這種描述方法,必須得習慣,才可能好讀。
拜神
當然是首推龍哥,當然,官網一定要看 http://coffeescript.org/!
結語
多寫就對了!