-
本地函數
- 函數式編程風格的重要設計原則是程序應該被解構成若干個小的函數,但是這些幫助函數的名稱可能會污染整個命名空間。
- 解決這樣問題的辦法: 將小函數設置為私有方法,或者把函數定義在別的函數之內,就如同本地變量一樣,這樣的函數我們稱為本地函數。
-
頭等函數
- 不僅可以定義和調用函數,還可以將其寫作匿名的字面量,并把它們作為值傳遞。
- 函數自面量杯編譯進類,并在運行期實例化為函數值。很類似于類(源代碼)和對象(運行期)的關系
-
函數字面量的縮寫和占位符
- => 左右兩邊有一側能夠推斷出類型就能夠縮寫
- 例如:
~~~
someNumber.filter((x: Int) => x > 0);
someNumber.filter((x) => x > 0);
someNumber.filter(x => x > 0);
someNumber.filter(_ > 0);
~~~
-
閉包
- def makeIncreaser(more: Int) = (x: Int) => x + more;
這里more是個自由變量,而x是綁定變量。
-
重復參數
- 指明參數長度可變。
- _* 這個標注會告訴編譯器把其中每個元素當作參數,而不是當作單一的參數傳遞。
-
尾遞歸
- 最后一個動作調用自己的函數稱為尾遞歸函數。
- 尾遞歸具有較大的局限性,因為JVM指令集使實現更加先進的尾遞歸形式變得很困難。如果遞歸是間接的就沒有優化的可能性了。