8.1 方法
定義函數(shù)最常用的方式作為某個對象的成員喉钢,這樣的函數(shù)稱為方法姆打。函數(shù)式編程的重要設(shè)計原則:程序應(yīng)該被分解為許多個小函數(shù), 每個函數(shù)都只做明確定義的任務(wù)
8.2 局部函數(shù)(處理helper function
問題)
為什么要用局部函數(shù)肠虽?
- 這些輔助函數(shù)
helper function
的名稱會污染整個命名空間幔戏,一旦函數(shù)被裝進(jìn)可復(fù)用的類和對象中時,我們希望類的使用者不要看到這樣的函數(shù)税课,而是直接使用類的功能 - 通常希望在后續(xù)的工作中采用其他方式重寫該類時闲延,保留刪除輔助函數(shù)
helper function
的靈活性 - 除了局部變量,也可以用
private def (...)
8.3 first-class function
Scala 支持first-class function韩玩, 不僅可以定義def(...) 并調(diào)用函數(shù)垒玲,而且還可以用匿名的字面量編寫函數(shù)并將它們進(jìn)行傳遞(unnamed literals and then pass
them around as values. 個人感覺有點像python 中的lambda函數(shù)風(fēng)格)
function literal vs function value
前者被編譯成類,并且試運行是實例化成函數(shù)值找颓,函數(shù)字面量存在于源碼(source code)合愈,而函數(shù)值以對象(object)的方式存在于運行時(at runtime),和類 classes (source code) 與對象objects (at runtime).
8.4 字面量的short form - leave off the parameter types
someNumbers.filter((x) => x > 0)
- remove useless characters is to leave out parentheses around a parameter whose type is inferred
someNumbers.filter(x => x > 0)
8.5 占位符 _(Placeholder sysntax
)
val f = (_: Int) + (_: Int)
_ + _ 將會展開一個參數(shù)接受兩個參數(shù)的函數(shù)字面量击狮。
8.6 部分應(yīng)用函數(shù) partially applied functions
somNumber.foreach(println (_))
或者somNumber.foreach(println _)
相當(dāng)于
someNumbers.foreach(x => println(x))