【Guava 教學】(3)高階排序概念的實現
By caterpillar | 2013/06/20Guava 看來只是個程式庫,但它實際上包括了不少高階觀念,先前的兩篇文章 從避免使用 null 開始、命名明確的條件檢查,其實也都是在談這些高階觀念,想善用 Guava,瞭解這些觀念是必要的,不然,只是當個程式庫來使用,就沒辦法用得順手,這樣是有點可惜了。
認識 Lambda/Closure(5)Java 的稻草人提案
By caterpillar | 2013/06/18終於要開始討論 Java 的 Lambda/Closure 了!不過這邊會先討論 2009 年提出的舊草案,討論這份舊草案,有助於我們瞭解為什麼 Lambda/Closure 會演變至今天 JDK8 所採取的形式。
tags: Java Preconditions guava-libraries 教學
【Guava 教學】(2)命名明確的條件檢查
By caterpillar | 2013/06/13有多少次了呢?你總會對傳入的引數作一些檢查,像是某個管理物件的容器,你也許會有個 add
方法,可將傳入的 List
中元素逐一收納,你不希望傳入 null
,或者傳入的 List
是空的…
tags: Java Lambda Closure Scala Type inference
認識 Lambda/Closure(4)從 Scala 中借鏡
By caterpillar | 2013/06/11在步入靜態語言的世界時,我們都知道編譯器需要型態訊息,以便在編譯時期檢查出各種可能的型態不符之錯誤。這點很有助益,因為可以在撰寫程式的一開始就捕捉到一些錯誤,降低因錯誤而帶來的成本負擔。不過在討論到程式碼的簡潔度時,靜態語言中冗長的型態宣告常是令人詬病的對象。
tags: null Optional guava-libraries 教學
【Guava 教學】(1)從避免使用 null 開始
By caterpillar | 2013/06/06大多數開發者對 Guava 的認識,是從其中對Java 標準 API 中 Java Collections 框架功能的增強或補充,那是 guava-libraries 中的一部份,也就是 Guava Collections,在這部份,Java Collections 框架作者 Joshua Bloch 也曾對其提出相關建議。然而 guava-libraries 不僅僅是 Collections 的功能加強版,它還包括了許多進階特性,甚至有不少設計是借鏡了函數式程式設計的概念,像是不可變動結構、避免 null 等,對不少 Java 傳統開發者而言,這些概念都是新穎而陌生的,也因此無法對其作更進一步的善用。
認識 Lambda/Closure(3)Python 對 Lambda/Closure 的支援
By caterpillar | 2013/06/04到目前為止你可以看到,如果函式是物件,那麼就可以: 被任何變數參考。 不只是被動地被呼叫,還可以主動地傳入函式中,取代某個可重用流程模版中的演算法。 建立 Closure 捕捉閒置變數(Free variable)並從函式中傳回。
tags: Java Lambda Closure JavaScript Free variable
認識 Lambda/Closure(2)什麼是 Closure?
By caterpillar | 2013/04/01Closure 是擁有閒置變數(Free variable)的運算式。閒置變數真正扮演的角色依當時語彙環境(Lexical environment)而定。支援閉包的程式語言通常具有一級函式(First-class function)。建立函式不等於建立閉包。如果函式的閒置變數與當時語彙環境綁定,該函式才稱為閉包。
認識 Lambda/Closure(1)從 JavaScript 的函式物件談起
By caterpillar | 2013/03/19JDK8 中即將支援 Lambda 語法,那麼 Lambda 是什麼?該怎麼用?Lambda/Closure 在 Java 語言中一直不存在,因而對於 Java 開發者來說是陌生的。實際上,Lambda/Closure 早存在許多程式語言之中,對於尚不熟悉 Lambda/Closure 的 Java 開發者來說,可試著從其他具備 Lambda/Closure 的語言中,瞭解其概念及運用方式。