
1. 設計原則
1.1. 將所有你愿意接受的作為引數的函式可能帶來的副作用以檔案的方式記錄下來
1.2. 最理想的情況下你接收的函式引數應該沒有任何副作用
1.3. 延遲資料結構是強力武器
1.4. 所有使用持久化資料結構的用戶都必須遵守“不修改”原則
2. 一等函式
2.1. first-class function
2.2. 能夠像普通變數一樣使用的函式
2.2.1. 可以作為引數傳遞
2.2.2. 可以作為結果回傳
2.2.3. 能存盤在資料結構中的函式
2.3. ::運算子
2.3.1. 創建一個方法參考,像使用函式值一樣使用方法
2.4. Lambda運算式
2.4.1. 直接表示方法的值
3. 高階函式
3.1. higher-order function
3.2. 接受至少一個函式作為引數
3.3. 回傳的結果是一個函式
3.4. 滿足任一要求
3.4.1. comparing
3.4.2. andThen
3.4.3. compose
4. 柯里化
4.1. 幫助你模塊化函式和重用代碼的技術
4.2. 將具備兩個引數(比如,x和y)的函式f轉化為使用一個引數的函式g,并且這個函式的回傳值也是一個函式,它會作為新函式的一個引數
4.3. 后者的回傳值和初始函式的回傳值相同,即f(x, y) = (g(x))(y)
5. 部分求值
5.1. partially applied
5.2. 當一個函式使用的所有引數僅有部分(少于函式的完整引數串列)被傳遞時
6. 持久化資料結構
6.1. 資料結構的值始終保持一致,不受其他部分變化的影響
6.2. final只能應用于類的欄位,無法應用于它指向的物件,如果你想要對物件進行保護,則需要將其中的欄位宣告為final,以此類推
6.3. 在其被修改之前會對自身前一個版本的內容進行備份
6.4. 能避免不必要的防御式復制
7. 資料庫中的持久化
7.1. 生命周期比程式的執行周期更長的資料
8. 函式式更新
8.1. 禁止使用帶有副作用的方法
8.2. 沒有改動任何現存的資料結構
8.3. 會導致過度的物件復制
9. fupdate
9.1. 純函式式
9.2. 會創建一個新的樹,并將其作為結果回傳,通過引數的方式實作共享
10. update
10.1. 每一個update的用戶都希望共享同一份資料結構,也希望能了解程式任何部分所做的更新
11. 延遲計算
11.1. 無法宣告一個遞回的Stream,因為Stream僅能使用一次
11.1.1. 一旦你對Stream執行一次終端操作呼叫,它就永久地終止了
11.2. 如果它們能讓程式設計更簡單,就盡量使用它們
11.3. 如果它們會帶來無法接受的性能損失,就嘗試以更加傳統的方式重新實作它們
11.4. 可以通過輔助方法(supplier)即時地創建串列中的元素
11.4.1. 輔助方法能幫忙創建更多的資料結構
12. 結合器
12.1. 函式式的思想
12.2. 將兩個或多個函式或者資料結構進行合并
12.3. 接受兩個或多個方法(函式)做引數且回傳結果是另一個函式的方法
13. 記憶表
13.1. memoizatio)
13.2. 為方法添加一個封裝器,在其中加入一塊快取
13.3. 遵守“參考透明性”原則的函式,其計算結構可以進行快取
14. 參考透明性原則
14.1. 使用相同的引數產生同樣的結果
14.2. 使用equal對資料結構值進行比較
15. 模式匹配
15.1. 函式式的特性
15.1.1. 能幫助解包資料型別
15.1.2. 訪問者模式
15.1.3. Java語言中switch陳述句的一種泛化
15.2. 模式匹配為操縱類樹型資料結構提供了一個極其詳細又極富表現力的方式
15.2.1. Scala是面向運算式的
15.2.2. 可以避免出現大量嵌套的switch或者if-then-else陳述句和欄位選擇操作相互交織的情況
15.2.3. Java的switch和if-then-else無法完全實作模式匹配的思想
15.3. 用Lambda,原則上你的代碼里不應該使用if-then-else
15.3.1. 方法呼叫
15.3.1.1. myIf(condition, () -> e1, () -> e2);
15.3.1.2.
static <T> T myIf(boolean b, Supplier<T> truecase, Supplier<T> falsecase)
{
return b ? truecase.get() : falsecase.get();
}
15.3.2. Lambda運算式能以簡單的方式實作單層的模式匹配
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/543951.html
標籤:Java
上一篇:day09-2-驗證以及國際化
