本文内容是基于2020/4/23郭神的直播内容,并非自己原创。
高阶函数的三种实现方法:
① 非匿名函数形式
定义两个函数如下:
普通函数:
fun plus(num1:Int, num2:Int):Int {
return num1+num2
}
高阶函数:
fun num1Andnum2(num1 : Int, num2:Int, operator:(Int, Int)->Int) : Int {
return operator(num1, num2)
}
/* operator虽然是一个参数名,但是这里可以理解为函数名,因为在return时可以看出来就是这么用的
* operator的类型为 (Int, Int)->Int, 是一个函数返回类型,是一个函数参数为两个Int类型,返回值为Int
* 的函数类型
* 最后高阶函数的返回值为Int类型,return语句对应的就是Int返回类型的值
*/
高阶函数的调用方法:
val num1 =10
val num2 =1
val result =num1Andnum2(num1, num2, ::plus)
println("高阶函数执行后的结果(两个整数相加:) $result")
执行结果:
高阶函数执行后的结果(两个整数相加:) 11
② 匿名函数形式
和非匿名函数形式不一样的地方时,不需要定义普通函数了。
只需要定义高阶函数
高阶函数:
fun num1Andnum2(num1 : Int, num2:Int, operator:(Int, Int)->Int) : Int {
return operator(num1, num2)
}
/* 匿名函数形式的高阶函数,顾名思义就是没有函数名,所以在调用的时候把函数名去掉了
* 而且不需要定义普通函数,而是直接把普通函数的代码放进高阶函数的参数中
* 最后高阶函数的返回值为Int类型,return语句对应的就是Int返回类型的值
* val result = operator(num1, num2)
* return result
* 因为 return operator(num1, num2)是简化后的写法
* operator: (Int, Int)->Int) 的返回变量为 result ,然后把result再返回
*/
高阶函数的调用方法:
val num1 =10
val num2 =1
val result =num1Andnum2(num1, num2,fun (num1:Int, num2:Int):Int{
return num1 + num2
})
println("高阶函数(两个整数相加等于: ) $result")
执行结果:
高阶函数(两个整数相加等于: ) 11
③ lambda形式
lamda函数的语法结构: {参数名1:参数类型, 参数名2:参数类型 -> 函数体}
高阶函数:
fun num1Andnum2(num1 : Int, num2:Int, operator:(Int, Int)->Int) : Int {
return operator(num1, num2)
}
高阶函数的调用方法:
val num1 =10
val num2 =1
val result =num1Andnum2(num1, num2){ a, b-> a+b}
println("高阶函数(两个整数相加等于: ) $result")
执行结果:
高阶函数(两个整数相加等于: ) 11
郭神的直播连接: