2014年3月20日 星期四

CoffeeScript

CoffeeScript是近期的熱門話題(2013年在Stackoverflow排行29),將會是未來IT人CV中重要的一項。

CoffeeScript是甚麼?CoffeeScript社群說"It's just JavaScript"。正是,它就是JavaScript。你可能會想它是不是像jQuery,是個類庫,幫我們去做一些經常要做的事情呢?非也!CoffeeScript實在是一個新語言,它改善了很多JavaScript的弱點。若你有Python的經驗,學習CoffeeScript便會容易得多,例如,你可以不再用{}了。那麼如何定義block呢?就像Python,用indentation!

看不明白以上的描述,好好看看書罷!上網可找到大量的材料,不贅。但既然如此,還是甚麼JavaScript呢?雖然語法改了,但你仍是在寫JavaScript,CoffeeScript的源程式會被編譯成JavaScript,實際執行的仍然是JavaScript。

先看看一個極簡單的例子
CoffeeScript

number   = 42
opposite = true

編譯成JavaScript後會變成
var number, opposite;
number = 42;
opposite = true;

單看這個例子CoffeeScript並沒有做太偉大的的事情,祗是加上了變量宣告(variable declaration)和; 而已!

但再看看下面的例子
CoffeeScript

list = [1, 2, 3, 4, 5]
for i in list
 alert i

編譯成JavaScript後會變成
var i, list, _i, _len;

list = [1, 2, 3, 4, 5];

for (_i = 0, _len = list.length; _i < _len; _i++) {
  i = list[_i];
  alert(i);
}

留意,上面的alert(i)前面是有一個空格的,有Python經驗的就不會對這佰生。

但若是這樣寫又如何
list = [1, 2, 3, 4, 5]
alert i for i in list

限於篇幅,不能再詳舉例子了,以我個人來說,CoffeeScript幫忙最大的是對類的定義和使用,請大家再參考文檔罷!

有人曾發起一個論壇,論題就是,一個熟悉JavaScript的programmer,還有必要去學CoffeeScript嗎?這類問題當然不會有甚麼確切的答案,但我個人就認為,CoffeeScript應可提高程式的質素,特別是穩定性,我的答案是肯定的!

我一向對JavaScript都沒有太大的好感,特別是其有些古怪的的語法,如==與===之別;又例如,要對不同的browser要有不同處理的方法等等……而jQuery的出現,解決了很多問題,但我都仍然維持如非如要,JavaScript可免則免的態度!CoffeeScript就令我對JavaScript有所改觀。

CoffeeScript最初是用Ruby寫的,後來就用‘自己’去寫‘自己’,即CoffeeScript是用CoffeeScript寫的!

這種情況在電腦科學上並不新鮮,不少(包括最早的)C Compiler都是用C寫的!可能你會覺得變成了雞與蛋的問題,究竟是有C program先還是有C Compiler先?解決這個問題有多種方法,例如,對CoffeeScript來說便簡單,因為它本來是用Ruby寫的,它毫無困難地可以用CoffeeScript寫成新版本的Compiler,再編譯成JavaScript,由這步起,它便可以自己Compile自己。

順帶一提,CoffeeScript的目標代碼是JavaScript,主要在browser內執行,可不可以在browser以外執行呢?可以,使用Node.js便是一個好辦法。實在,CoffeeScript的Compiler正是由Node.js所執行的!

沒有留言: