说说Kotlin lambda 那些事儿

Lambda

  1. 基本形式:
    函数类型 – (R, T) -> R,因此 fold 接受一个函数作为参数, 该函数接受类型分别为 R 与 T 的两个参数并返回一个 R 类型的值。
    -> 后面接的是函数体,函数体的最后一句表达式结果就是lambda表达式的返回值

  2. lambda表达式的本质是匿名函数,在底层以匿名函数来实现
    减少了代码量编写,同时使代码更加简洁明了

Lambda表达式的特点

  • Lambda表达式总是被大括号括着
  • 其参数(如果存在)在 -> 之前声明(参数类型可以省略)
  • 函数体(如果存在)在 -> 后面。

总结:
lambda表达式是一个语法糖(所谓与语法糖,就是对程序员友好的东西),lambda总是被大括号包裹着

Lambda 表达式用法

  1. 无参数的情况 :
    val/var 变量名 = { 操作的代码 }

  2. 有参数的情况
    val/var 变量名 : (参数的类型,参数类型,…) -> 返回值类型 = {参数1,参数2,… -> 操作参数的代码 }

可等价于
// 此种写法:即表达式的返回值类型会根据操作的代码自推导出来。
val/var 变量名 = { 参数1 : 类型,参数2 : 类型, … -> 操作参数的代码 }

  1. lambda表达式作为函数中的参数的时候,这里举一个例子:
    fun test(a : Int, 参数名 : (参数1 : 类型,参数2 : 类型, … ) -> 表达式返回类型){

    }

匿名函数:

  • 匿名函数的特点是可以明确指定其返回值类型。
  • 它和常规函数的定义几乎相似。他们的区别在于,匿名函数没有函数名。
  • 匿名函数和lambda表达式的区别:
    1. 匿名函数的参数传值,总是在小括号内部传递。而Lambda表达式传值,可以有省略小括号的简写写法。
    2. 在一个不带标签的return语句中,匿名函数时返回值是返回自身函数的值,而Lambda表达式的返回值是将包含它的函数中返回。

下划线:

val map = mapOf(“key1” to “value1”,“key2” to “value2”,“key3” to “value3”)

map.forEach{
key , value -> println("$key \t $value")
}

// 不需要key的时候
map.forEach{
_ , value -> println("$value")
}

闭包
java:不支持闭包,因此对象是他的一等公民,而函数,变量是二等公民
kotlin:支持闭包,函数中可以嵌套函数(如:匿名函数,lambda,局部函数,表达式),因此函数和变量是一等公民,而对象属于二等公民

闭包的形式

  1. 携带状态

  2. 引用外部变量,并改变外部变量的值

注意:

  1. Lambda 只会返回闭包传递的最后一个返回值

  2. 语法糖:指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
    之所以叫语法糖,不只是因为加糖后的代码功能与加糖前的保持一致,更重要的是,糖在不改变其所在位置的语法结构的前提下,实现了运行时的等价

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值