如何使用Lambda表达式和匿名函数工作

91 阅读3分钟

使用Lambda表达式和匿名函数工作

Lambda表达式在理解上有一定的难度。看起来像这样的类型:(Int) -> String ,对许多开发者来说并不直观。本文旨在简化lambda表达式背后的概念以及如何使用它们。

简介

lambda表达式是一个你只作为表达式传递的函数。lambda表达式有如下结构:{} 。它们是一种专门的语言结构,有助于在Kotlin中表示函数。

前提条件

在我们继续之前,必须具备以下条件。

  1. 对Kotlin编程语言有基本了解。
  2. IntelliJ IDEA或访问[Kotlin Playground]。

目录

  1. 什么是lambda表达式。
  2. lambda表达式的使用案例。
  3. 总结。

什么是Lambda表达式?

与Java不同,Kotlin中的函数是第一类。这意味着你可以把它们作为变量和数据结构来存储。你可以把它们作为参数传递,它们也可以是一个返回值。

既然你可以把它们作为变量存储,它们就必须有一个类型。Kotlin使用函数类型来表示它们。函数类型有以下结构。

(parameterType) -> returnType

作为函数类型的变量期待一个lambda表达式,如下所示。

  • val a:Int 期待一个值,如 , 或 。1``2 3

  • val b:String 期待一个值,如 或 。"string" "name"

  • val c:Boolean 期待一个值,如 或 。true false

本着这种精神。

  • val d:() -> Int 期待一个值,如 或{1} {2}

  • val e:() -> String 期待一个值,如 或{"string"} {"name"}

当我们引入参数时。

val f:(Int) -> String 期待一个值,如: 或{"string"} {"name"}

注意:你不一定要使用参数中传递的值。但你必须尊重返回类型并返回适当的值。

高阶函数是可以有lambda表达式传入的函数。它们也可以返回lambda表达式。

在处理所有的函数时,有3个主要步骤需要遵循。

第1步。创建函数:这涉及到给函数命名、参数和返回类型。

第2步。实现函数:这是你定义函数应该执行的任务的地方。

第3步。调用函数:这里你调用函数,并给它提供执行任务所需的参数。

注意:本文在函数式编程的背景下提到了函数。在面向对象编程中,你可以使用接口和抽象类。它们可以推迟函数的实现。之后,当你实现接口或继承类时,你可以覆盖该函数。

lambda表达式的一个使用案例

正则函数是在实现其功能的地方创建的。

看一下这个函数。

fun add(a:Int, b:Int){
    val sum = a + b
    println("The sum is $sum")
}

fun main(){
    add(1,2)
}

该函数被创建,然后在lambda{ 之后添加了任务的实现。然后我们调用add 函数和main 函数。

output: The sum is 3

Lambda表达式是在一个地方创建的,但它们可以在其他地方实现其功能。

在下面的代码中,有2个函数需要跟踪。

  1. add 是一个高阶函数,因为它把 作为参数。printer
  2. printer 是我们的lambda表达式,它的类型是 。(Int)->Unit

在你的编辑器中对add 函数做如下修改。

fun add(a:Int, b:Int, printer:(Int) -> Unit){
    val sum = a+b
    printer(sum)
}

我们会注意到,在上面的代码中。

  • add 已经创建并实现了一个正则函数的作用。它还没有在 函数中被调用。这使得 可以使用相同的实现来进行不同的调用。main add

  • printer 已被不同地处理。它被创建和调用,但它的实现还没有出现。它将在 函数中实现,因为我们调用 函数。main() add

在最后一步,将这段代码添加到你的主函数中。

fun main(){
    add(2,4,{ value-> println("The sum is $value") })
    add(3,5,{value-> println("The addition gives $value") })
}

在上面的代码中,我们通过高阶函数传入我们λ表达式的实现。我们也给传入lambda的参数命名为value 。这表明lambda表达式的实现可以很容易地改变。

预期的输出应该是。

The sum is 6

The addition gives 8

总结

lambda表达式允许你以不同的方式将函数视为变量。它们甚至允许你传递不同的操作作为函数的实现,就像你传递不同的值给一个变量一样。继续探索Lambda表达式的其他用例吧!