函式式程式設計基礎
1、在scala中,方法和函式幾乎可以等同,只是函式的使用方式更加的靈活多樣 [方法轉函式]。
函式式程式設計充分利用函式、 支援的函式的多種使用方式。
函式是一等公民,像變數一樣,既可以作為函式的引數使用,也可以將函式賦值給乙個變數. ,函式的建立不用依賴於類或者物件。
2、函式/方法的定義
def 函式名 ([引數名: 引數型別], ...)[[: 返回值型別] =]
返回值解析:
: 資料型別 = ,表示返回值確定,清晰
= ,有返回值, 型別是推斷出來的
無,無返回值 unit
如果沒有return ,預設以執行到最後一行的結果作為返回值
3、細節討論
函式的形參列表可以是多個, 如果函式沒有形參,呼叫時 可以不帶()
scala中的函式可以根據函式體最後一行**自行推斷函式返回值型別。那麼在這種情況下,return關鍵字可以省略
如果函式明確使用return關鍵字,那麼函式返回就不能使用自行推斷了,這時要明確寫成 : 返回型別 =
如果函式明確宣告無返回值(宣告unit),那麼函式體中即使使用return關鍵字也不會有返回值
scala語法中任何的語法結構都可以巢狀其他語法結構
遞迴函式未執行之前是無法推斷出來結果型別,在使用時必須有明確的返回值型別
4、可變引數
/支援0到多個引數 def sum(args: int*) : int =
//支援1到多個引數 def sum(n1: int, args: int*) : int =
5、方法轉函式
def f1(): int =
var f3 = f1 _
// 如果要列印f3函式的返回值 println(f3())
6、匿名函式
val f4 = (a: string, b:double) => a.toint + b.toint
藍色部分是匿名函式,匿名函式的返回型別是通過函式推倒完成的,如果函式體有多行,用{},f4表示指向匿名函式的變數
7、作為引數的函式
def and(x: () => boolean, y: () => boolean) = x() && y()
其中,() => boolean
等價於function0[boolean](函式型別)
,表示引數列表為空,返回值為boolean
的函式型別。x也相當於是函式變數名。現在()可以省略。
def test2(a: => int) =
該方法在方法變數名和引數變數返回型別之間使用 => 符號來設定傳名呼叫。之後直接傳遞函式名。
注意:每次使用傳名呼叫時,直譯器都會計算一次表示式的值
在scala中函式也有型別
8、高階函式
將其他函式作為引數或返回值為乙個函式的函式
9、閉包
閉包就是乙個函式與其相關的引用環境組合的乙個整體
10、函式柯里化
柯里化指的是將原來接受多個引數的函式變成新的接受乙個引數的函式的過程
11、引數(型別)推斷
引數型別是可以推斷時,可以省略引數型別
當傳入的函式,只有單個引數時,可以省略括號
如果變數只在=>右邊只出現一次,可以用_替代
12、惰性函式
將耗時的計算推遲到絕對需要的時候。
13、偏函式
在對符合某個條件,而不是所有情況進行邏輯操作時,使用偏函式是乙個不錯的選擇
將包在大括號內的一組case語句封裝為函式,我們稱之為偏函式,它只對會作用於指定型別的引數或指定範圍值的引數實施計算,超出範圍的值會忽略.
偏函式在scala中是乙個特質partialfunction
SCALA函式式程式設計
建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 scala的語法規定,將函式賦值給變數時,必須在函式後面加上空格和下劃線 正常宣告乙個帶有乙個字串型別引數,並返回unit型別的方法 sca...
Scala函式式程式設計
知識點1.scala的柯里化技術,允許將接受多個引數的函式,轉變為接受單一引數的函式 2.柯里化的作用可以允許使用者自建控制結構 object demo03 f1 a int,b int int def f11 a int b int f11 a int b int int def f2 a int...
Scala函式式程式設計
package com.yz6 import scala.collection.mutable.arraybuffer object test 定義乙個函式 軀殼 靈魂 def function0 name string unit println 你好 name 將乙個函式作為值傳遞給另乙個函式 在...