Kotlin lambda表达式

本文深入探讨了Kotlin中的lambda表达式和匿名函数的使用,包括它们的语法、参数传递方式、返回类型推断及非局部返回行为。通过实例讲解了lambda表达式在不同场景下的应用,如作为函数参数、在代码块中使用等。
官方文档

官方文档

使用
  • 完整语法

lambda 表达式总是括在花括号中, 完整语法形式的参数声明放在花括号内,并有可选的类型标注,函数体跟在一个 -> 符号之后。如果推断出的该 lambda 的返回类型不是 Unit,那么该 lambda 主体中的最后一个(或可能是单个)表达式会视为返回值

lambda表达式总是在花括号内!!,其参数可以放在花括号里面!!

val sum: (Int, Int) -> Int = { x: Int, y: Int -> x + y }
  • 如果函数的最后一个参数是函数,那么作为相应参数传入的 lambda 表达式(就是大括号)可以放在圆括号之外:
val product = items.fold(1) { acc, e -> acc * e }
val thread = Thread(){ } // lambda 是函数的最后一个参数 
  • lambda表达式为调用的唯一参数,那么圆括号可以完全省略
run { println("...") }
val thread = Thread{ }  // 只有一个参数,且为lambda表达式
  • 没有参数:可以省略 -> 符号
val thread = Thread({ })
  • it:单个参数的隐式名称

一个 lambda 表达式只有一个参数是很常见的。如果编译器自己可以识别出签名,也可以不用声明唯一的参数并忽略 ->。 该参数会隐式声明为 it

ints.filter { it > 0 } // 这个字面值是“(it: Int) -> Boolean”类型的
  • 闭包编译完后为匿名函数的形式,最多支持22个参数,如果需要新增,则需要自定义新的方法
// 声明
val acho = { name : String -> 
     println(name)
}
匿名函数

如果需要显示指定函数的返回类型,可以使用匿名函数

 fun(x : Int, y : Int) : Int = x +y
 //代码块:
 fun(x : Int,y : Int) : Int {
     return x + y
 }

参数和返回类型的指定方式与常规函数相同,除了能够从上下文推断出的参数类型可以省略:

    ints.filter(fun(item) = item > 0)

匿名函数的返回类型推断机制与正常函数一样:对于具有表达式函数体的匿名函数将自动推断返回类型,而具有代码块函数体的返回类型必须显式指定(或者已假定为 Unit)。
请注意,匿名函数参数总是在括号内传递。 允许将函数留在圆括号外的简写语法仅适用于 lambda 表达式。
Lambda表达式与匿名函数之间的另一个区别是非局部返回的行为。一个不带标签的 return 语句总是在用 fun 关键字声明的函数中返回。这意味着 lambda 表达式中的 return 将从包含它的函数返回,而匿名函数中的 return 将从匿名函数自身返回。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值