純函數(shù)(Pure Function)是這樣一種函數(shù)——輸入輸出數(shù)據(jù)流全是顯式(Explicit)的。
顯式(Explicit)的意思是,函數(shù)與外界交換數(shù)據(jù)只有一個(gè)唯一渠道——參數(shù)和返回值;函數(shù)從函數(shù)外部接受的所有輸入信息都通過(guò)參數(shù)傳遞到該函數(shù)內(nèi)部;函數(shù)輸出到函數(shù)外部的所有信息都通過(guò)返回值傳遞到該函數(shù)外部。
如果一個(gè)函數(shù)通過(guò)隱式(Implicit)方式,從外界獲取數(shù)據(jù),或者向外部輸出數(shù)據(jù),那么,該函數(shù)就不是純函數(shù),叫作非純函數(shù)(Impure Function)。
隱式(Implicit)的意思是,函數(shù)通過(guò)參數(shù)和返回值以外的渠道,和外界進(jìn)行數(shù)據(jù)交換。比如,讀取全局變量,修改全局變量,都叫作以隱式的方式和外界進(jìn)行數(shù)據(jù)交換;比如,利用I/O API(輸入輸出系統(tǒng)函數(shù)庫(kù))讀取配置文件,或者輸出到文件,打印到屏幕,都叫做隱式的方式和外界進(jìn)行數(shù)據(jù)交換。
//一些例子
//純函數(shù)
def add(a:Int,b:Int) = a + b
//非純函數(shù)
var a = 1
def addA(b:Int) = a + b
def add(a:Int,b:Int) = {
println(s"a:$a b:$b")
a + b
}
def randInt() = Random.nextInt()
單元測(cè)試什么的,趕緊去?http://www.scalatest.org?試試吧
更多建議: