你可以在 Google Play 或 Pubu 上取得收錄本系列文章的 Java Lambda Tutorial 電子書。
根據維基百科對 Lambda 條目的說明:「在諸如 Lisp、Python 的語言中,Lambda 是代表匿名函數(Anonymous)或閉包(Closure)的運算子。」
JDK8 中即將支援 Lambda 語法,那麼 Lambda 是什麼?該怎麼用?Lambda/Closure 在 Java 語言中一直不存在,因而對於 Java 開發者來說是陌生的。實際上,Lambda/Closure 早存在許多程式語言之中,對於尚不熟悉 Lambda/Closure 的 Java 開發者來說,可試著從其他具備 Lambda/Closure 的語言中,瞭解其概念及運用方式。
以現今許多開發者較熟悉的 JavaScript 為例。在 JavaScript 中可以如下定義函式:
function doSome(param) {
    // 作些事
}doSome 變數:
      var doSome = function(param){
    // 作些事
};Function 的實例。你也可以不將函式物件指定給變數,這就形式了一個匿名函式:
      function(param) {
    // 作些事
};new Function('param', '函式本體')。這強調了函式本身是個物件,也就是個值的概念。即然函式是物件,那麼可以作什麼?它可以指定給別的變數:
      function foo(param) {
    document.write(param, '<br>');
}
var zzz = foo;
zzz('demo');var foo = function(param) {
    document.write(param, '<br>');
};
var zzz = foo;
zzz('demo');function show(element) {
    document.write(element, '<br>');
}
[1, 2, 3, 4, 5].forEach(show);var show = function(element) {
    document.write(element, '<br>');
};
[1, 2, 3, 4, 5].forEach(show);var array = [1, 2, 3, 4, 5];
for(var i = 0; i < array.length; i++) {
    document.write(array[i] + '<br>');
}[1, 2, 3, 4, 5].forEach(function(element) {
    document.write(element + '<br>');
});forEach 函式,那可以自行設計:
      Array.prototype.forEach = function(callback) {
    for(var i = 0; i < this.length; i++) {
        callback(this[i]);
    }
};
[1, 2, 3, 4, 5].forEach(function(element) {
    document.write(element + '<br>');
});- 根據需要將之傳遞給另一個變數參考。
- 函式不再只能被呼叫,而可以主動傳遞給別的函式進行動作。
- 流程中不同的演算需求,可以設計回呼函式來抽換。
以上我們從 JavaScript 認識了匿名函式、函式是物件的概念,至於它為什麼叫 Lambda,這要到比較後面才會提到。下一篇文章,則會先從什麼是 Closure 開始認識。

