Kotlin笔记16-高阶函数


10.1 高阶函数

  • 定义高阶函数

序号

Tips

1

接受Lambda参数的函数称为具有函数式编程风格的API

2

借助高阶函数定义自己的函数式API

定义

如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数称为高阶函数

新概念

函数类型

作用

高阶函数允许让函数类型的参数决定函数的执行逻辑

​函数类型的基本语法规则:​

(String, Int) -> Unit

->左边

->右边

声明函数接收的参数

声明返回值类型

参数之间 , 逗号隔开

无返回值就使用Unit=void(Java)

​将上述函数添加到参数声明或返回值上,那么他就是高阶函数:​

fun example(func: (String, Int) -> Unit) {
func("hello", 123)
}

​Example:​

fun num1AndNum2(num1: Int, num2: Int, operation: (Int, Int) -> Int): Int {
return operation(num1, num2)
}
fun plus(num1: Int, num2: Int): Int {
return num1 + num2
}

fun minus(num1: Int, num2: Int): Int {
return num1 - num2
}

​用法:​

fun main() {
val num1=100
val num2=80
val result1= num1AndNum2(num1,num2,::plus)
val result2= num1AndNum2(num1,num2,::minus)
println("result1 is $result1")
println("result2 is $result2")
}

​结果:​​​【kotlin】Kotlin笔记16-高阶函数(函数类型)_高阶函数
Kotlin支持Lambda表达式,匿名函数,成员引用来调用高阶函数
​用法1-lambda表达式:​

val result1 = num1AndNum2(num1, num2) { n1, n2 ->
n1 + n2
}
val result2 = num1AndNum2(num1, num2) { n1, n2 ->
n1 - n2
}

小试牛刀
​​​仿apply:​

fun StringBuilder.build(block: StringBuilder.() -> Unit): StringBuilder {
block()
return this
}
  1. 给StringBuilder定义了一个build扩展函数,接受函数类型参数,返回值也是StringBuilder
  2. 调用build函数时传入Lambda表达式自动拥有Stringbuilder的上下文,同时拥有apply的实现方式

​apply实现Example:​

fun eatFruits() {
val list= listOf("Apple","Banana","Orange","Orange","Pear","Grape")
val result=StringBuilder().apply {
append("Start eating fruits.\n")
for (fruit in list){
append("$fruit ")
}
append("\nAte all fruits.")
}
println(result.toString())
}

​apply实现Example:​

fun eatFruits1(){
val list= listOf("Apple","Banana","Orange","Orange","Pear","Grape")
val result=StringBuilder().build {
append("Start eating fruits.\n")
for (fruit in list){
append("$fruit ")
}
append("\nAte all fruits.")
}
println(result.toString())
}