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所執行的!

2014年3月8日 星期六

從東野圭吾看日本

我從不諱言,我很喜歡到日本旅行,但絕不會在日本生活。

理由很多,最重要的是我不能了解日本人。日本文化充滿著矛盾,例如,日本有不少出色的當代藝術家,文學、電影、設計…多不勝數。但同時也是成人色情電影的大國,當然,她們拍色情電影亦非常認真和專業,有不少人亦視之為藝術作品。

當日本人把你視為對手甚或是敵人,你有大麻煩了。就算視你為朋友,也要小心!

這些複雜的性格,充分表現於日本的推理小說中。日本出色的推理小說佈局之嚴謹和複雜,我想是世界第一的。就算是英美名著,佈局都遠不及日本作品的複雜。但問題就在於若作者不是這麼深沉和複雜,又如何能寫出這樣的作品呢?

我在這裏曾介紹過東野圭吾,應是說《幻夜》。《幻夜》可說是群魔亂舞,整本書差不多找不到一個正面的人物。最近我又看完了他的《解憂雜貨店》和《殺人之門》。這兩本書,給我完全不同的感受,前者極為正面,當我對太太講述一段情節時,我居然感動到哭起來。一個中年男人還會哭!這段故事是講一位年青人離開家鄉到東京讀大學,他對音樂有強烈的興趣,結果放棄了學業,毅然投身音樂事業,但可惜,限於他的天份,根本進不了專業音樂界。他想放棄,回鄉繼承祖業,卻遭到父親的拒絕,父親的理由很簡單,當一個人立志要做某事時,絕不能遇難就放棄,所謂祖業,其實祗不過是個小魚檔,但就是如此,也不能交給一個遇難便放棄的人。父親要兒子努力,不論再難,都要在音樂路上留下腳印!

兒子回到東京,繼續其音樂之路,但一年又一年,他還是當不上專業音樂人!因為他根本不具備所需的天份。作者巧妙地令他在音樂路上留下腳印,不是簡簡單單的,而是轟轟烈烈的腳印!這祗是書中的其中的一個情節而已,多個看似獨立的故事,後來又緊扣在一起,書中的每個人物都得到救贖,都找到人生的地圖!

這書正面得令我下淚!以我的年紀和經驗,對一般的煽情橋段,甚麼妹妹在不知情下愛上了哥哥,又甚麼患上了絕症等等…可說是免疫了(若不是嘲笑的話)。

這部作品就是散發著很多日本的價值觀,不要小看一個小魚檔,經營者是何等的認真,寧可結束也不會交給一個無心經營的兒子。但又不是在描述一個理想世界,現實是何等的殘酷!能在殘酷的現實中講價值觀和理想,才會引起我的共鳴!

《殺人之門》就剛剛相反,這是我看過的最‘負面’小說!《幻夜》雖然負面,但離現實有相當距離,至少我從未接觸過凶殺案,說甚麼都是小說情節而已。而《殺人之門》就相當真實,書中講的不是甚麼殺人事件,而是在社會打滾,經常會遇見的情節,一些出賣朋友的簡單故事。

故事開始時,主角還在小學,終結時他三十多,這麼多年來,他就是不停地被一位朋友所出賣,他本來生於富裕的中產家庭,父親是個牙醫,有自己的診所,他就是大少爺一名。故事就是講他如何被出賣,弄到家破人亡,一次又一次,他努力地從谷底再爬起來時,又會再被出賣,令他再度沉淪。

老實說,這書真是看得我很鬱悶!我曾見過不少出賣朋友的事情,例如,對朋友的女友 ‘見艷心起’,這些事情實在很普遍,但大部份都是獨立事件。這書令我最感到不寒而粟的,就是廿多年發生的事,都是同一局棋,主角原來是被擺佈的棋子,不單是棋子,而是‘棄子’!主角就是被擺弄了廿多年!

何謂‘棄子’?就是故意培養,在必要時可以犠牲的棋子!但不可讓‘棄子’輕易犠牲,又不可以讓‘棄子’得到幸福!由於不可隨便犠牲‘棄子’,每當‘棄子’走投無路時,還要出手相助!主角多次接近走投無路時,他這位‘朋友’總是跳出來幫他,原來這也是計劃的一部份,是育養‘棄子’的手段!

想到這裏,不單是心寒,簡直就是毛骨悚然,若我身邊有這樣的朋友,‘我死定了’!

為甚麼同一位作者,可以有這樣不同的作品?可能這是一個銅幣的兩面,日本可能就是有著這樣的‘雙重性格’!當我回顧近代史,冷靜的想想,這不就是很合乎史實嗎?