Kotlin 高阶函数
如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数就是高阶函数。
例如:
fun seniorFun(param: String,func: (String,Int) -> Unit){
func("hello",123)
}
函数类型 Kotlin除了整型、布尔型、等类型外还增加了一个函数类型。 函数类型的语法规则类似这样:(String,Int)-> Unit -> 左边括号内就是该函数的所有参数类型,->右边就是该函数的返回值类型,这里Unit表示该函数不需要返回任何数据或者说返回Unit类型。 将函数类型添加到某个函数参数声明中或者返回值声明中,那这个函数就是高阶函数了。
高阶函数案例1:
fun num1AndNum2(num1: Int,num2: Int,getNum: (Int,Int) -> Int) : Unit {
println(getNum(num1, num2))
}
fun getLargeNum(a: Int,b: Int) : Int {
return max(a,b)
}
fun getSmallNum(a: Int,b: Int) : Int {
return min(a,b)
}
fun main() {
num1AndNum2(3,5,::getLargeNum)
num1AndNum2(4,9,::getSmallNum)
}
两个冒号加函数名::getLargeNum 这是函数引用的写法。 为了不用在每次调用高阶函数前都要定义一个与其函数类型相匹配的函数,可以使用Lambda表达式来解决。
num1AndNum2(2,3) { n1,n2 ->
max(n1,n2)
}
Lambda表达式同样可以完整地表达一个函数的参数声明和返回值声明,Lambda表达式中的最后一行代码会自动作为返回值。
高阶函数案例2:
fun StringBuilder.build(block: StringBuilder.() -> Unit) : StringBuilder {
block()
return this
}
fun main() {
val list = listOf("Apple","Banana","Orange","Pear")
val result = StringBuilder().build {
append("开始吃水果:\n")
for (fruit in list){
append(fruit).append("\n")
}
append("水果吃完了。")
}
println(result.toString())
}
|