纯函数、高阶函数、匿名函数是scala中的3个重要概念。
高阶函数是指能完成如下操作之一的函数:
- 可以使用一个或多个函数作为参数,从而完成某些操作;
- 返回一个函数作为其返回值;
纯函数:如果一个函数的返回值只能由其输入决定,并且显然没有显著的副作用,则该函数为纯函数。
匿名函数:一般是某个函数你只会在一个地方使用,所以没有进行定义。
1.纯函数
纯函数一般是指直接进行运算的函数。其一般不需要进行IO以及异常的处理。
//计算两数和
def sum(a: Int, b:Int) : Int = {
a + b
}
//计算两数乘积
def multiply (a: Int, b:Int) = a * b
2. 匿名函数
匿名函数一般是直接在某些方法中使用lambda或者表达式直接进行数值计算的函数,此函数只在当前使用一次,不会在其他地方进行调用。匿名函数也是一个完整函数,只是没有函数名。
var a = (x:Int) => x+1
3.高阶函数
scala中允许将函数作为参数进行传递或从其他函数中返回一个函数作为结果,我们称这种函数为高阶函数。
//定义求平方的函数
def square(x: Int): Int = x * x
//在sumSquares中调用square
def sumSquares(a: Int, b: Int): Int = {
if(a > b) 0 else square(a) + sumSquares(a + 1, b)
}
上例中我们在sumSquares调用squre去求某个段内的数字平方的和。我们也可以在函数中指定回调函数,具体代码如下:
def main(args: Array[String]): Unit = {
//调用函数
println(transferMoney(100, bankFee))
}
//定义函数,指定bankFee作为回调函数,这个函数中的参数为money
def transferMoney(money : Double, bankFee : Double => Double): Double = {
money + bankFee(money)
}
//定义回调函数
def bankFee(amount : Double) = amount * 0.5