2015年10月23日

[Java] Java8 新功能筆記 (4) - Optional

Java 8 - Optional

Optional 是值的容器,只有兩種狀態,不是有值就是沒值。目的是做為 null 的替代方案。Optional 提供工廠方法,將你輸入的值產生為 Optional 物件,這時Optional 物件即為該值的容器,若要取回該值,必須使用 get() 方法。

Optional 屬於 value-based,對於識別敏感的操作(包含參考相等的判斷(==)、hash code或同步(synchronization)等)會有不確定性的結果,應該要避免使用這些操作。

將值轉為 Optional 的方法

  • of():接受非 null 的值並回傳 Optional 物件。
  • ofNullable():可以接受 null 的值,回傳 Optional 物件。

2015年10月22日

[Java] Java8 新功能筆記 (3) - Stream

Java 8 - Stream

介紹


Java 8 新增了一個新的 Stream package 專門用來處理集合(collection),搭配 lambda expression,在處理集合方面變得更加方便。

Stream 可以執行一系列的操作,可以使用循序運算(sequential)也可以使用並行運算(parallel)。Stream 用起來很像 Builder 模式,操作是以一個接一個的方式串起來,因為在設計上有考量到效率,所以每個 stream 方法回傳的值有兩種,並且行為也不同。

當 stream 的方法回傳的值是 Stream 型別時,並不會實際去執行運算,而是當該方法回傳除了 Stream 型別以外的值時(包含void),才真正執行運算。所以要記住 stream 方法的串接規則,中間串接的永遠是回傳 Stream 型別的方法,只有最後一個才是串接傳回某個非 Stream 型別的值的方法。在 API 文件中,屬於終止操作的方法,會有「 This is a terminal operation. 」這樣的標示,表示這個方法只能串接在最後一個。

Stream 提供 filter、sort、map 等功能。Stream 和 Collection 的區別是,Collection 是一種靜態的資料結構,使用的是記憶體空間,而 Stream 則是運算,使用的是 CPU。

2015年10月21日

[Java] Java8 新功能筆記 (2) - Lambda expression

Java 8 - Lambda expression

介紹


Java 8 新加入的功能 Lambda 表達式,讓你可以將函式做為方法的參數,如果你寫過 JavaScript 應該會覺得有點像。Lambda 有許多的優點,可以簡化匿名內部類別、偵聽器及事件處理等的冗長程式碼,讓它們不只變短也易讀。另外還可以實體化前面介紹的函式介面、並且以更方便的方式操作集合等等。

2015年10月20日

[Java] Java8 新功能筆記 (1) - Functional Interfaces

Java 8 - Functional Interfaces

Functional Interfaces(函式介面)


介紹


Java 8 的新功能最讓大家有印象的是 Lambda 表達式,但在使用 Lambda 表達式之前,要先瞭解另一個新的功能,叫做 Functional Interfaces 函式介面。其實它不是新的東西,只是被賦予特定任務,所以重新定義它的名稱及用途。

函式介面的定義是
只擁有一個抽象方法的介面。
看起來會像是這樣:

@FunctionalInterface
public interface Message {
    public abstract void hello(String msg);
}

@FunctionalInterface 是新的標註,可以明確指示編譯器,這是一個函式界面。當你加上這個標註時,這個介面中將只能宣告一個抽象方法,如果你宣告兩個以上的抽象方法,編譯器將會立即告訴你這裡是錯的。

如果不加標註,但只宣告一個抽象方法的話,它仍然是函式介面,只是少了編譯器的檢查。

abstract 寫不寫都可以,因為在 Java 7 之前,介面中的任何方法本來就都是抽象的,但在 Java 8 中,介面有了新的定義規則。

2015年10月6日

[Swift] Core Data 入門 (2)

Core Data


重構 - 將方法移動到實體


Core Data 入門(1) 的範例中,我們把對資料庫動作的所有程式都寫在 ViewController 裡面,這樣的做法不太好,既然這些動作和 Product 實體有關,那就應該放在它自己身上,任何對 Product 的動作一律由它來處理。