【Kotlin笔记】高阶函数

高阶函数


函数类型

在我们熟知的编程语言中没有函数类型这个东西,Kotlin中提出了这个概念

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

(String,Int)->Unit

->的左边部分是函数类型的参数,用一个括号放入参数,多个参数用逗号隔开

->的右边部分是函数类型的返回值类型


高阶函数


高阶函数的定义

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

高阶函数接收的这个函数参数就是上述的函数类型

举例说明

下面我们看一个高阶函数的例子:

fun highOrderFun(func:(String,Int)->Unit){
    func("abc","123");   //函数参数的调用和普通参数一样,传入括号中对应的参数就行
}

使用高阶函数,我们就可以让传入的参数类型来决定函数的执行逻辑,下面我举例说明

(1)首先我定义一个高阶函数

//此高阶函数中的函数类型,它会实现两个正整数的某种算数操作	 	 	
fun num1AndNum2(num1:Int,num2:Int,calculate:(n1:Int,n2:Int)->Int):Int{
        return calculate(num1,num2)
}

(2)调用高阶函数的方法

  • 定义一个与函数类型匹配的函数A,然后在调用时将该函数传入函数类型,传入时的写法为::A
//两数相加
fun add(n1:Int,n2:Int):Int{
    return n1+n2
}
//两数相乘
fun multiplication(n1:Int,n2:Int):Int{
    return n1*n2
}


//调用高阶函数,其具体的运算逻辑就是我们传入的add和multiplication,分别执行两个数相加和两个数相乘
val result1=num1AndNum2(2,5,::add)
val result2=num1AndNum2(2,5,::multiplication)
  • (2)直接使用Lambda高阶函数
val result1=num1AndNum2{n1,n2->n1+n2}
val result2=num1AndNum2{n1,n2->n1*n2}

一个常用的简化代码实例

fun StringBuilder.build(block:StringBuilder.()->Unit):StringBuilder{
    block()
    return this
}

上述代码中我们给StringBuilder类定义了一个build扩展函数,这个扩展函数接收了一个函数类型,函数类型前面加上了StringBuilder.,表明我们的函数类型定义在StringBuilder这个类中。
然后当我们调用这个扩展函数时,Lambda表达式中就会拥有StringBuilder的上下文,且函数的返回值为StringBuilder,所以我们可以使用build这个扩展函数来简化StringBuilder对字符串的构建。

val stringBuiler=StringBuilder().buid{
    append("abc")
    append("qwe")
}

你可能感兴趣的:(Kotlin,kotlin)