Kotlin笔记 六(三) Lambda表达式.md

本文介绍了Kotlin中的Lambda表达式,包括定义、调用方式和作为函数式接口的实例。详细阐述了如何定义和使用Lambda,特别是参数类型推断、省略形参列表以及在函数调用中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lambda表达式#

Kotlin中的lambda表达式和Java中lambda表达式有相似的地方,也有不同的地方,建议同时对比学习,避免混淆java .参考Java中lambda表达式

1、定义

lambda表达式你可以理解成简化表达后的匿名函数;

  1. Labmbda表达式总是被大括号括着
  2. 定义lambda表达式不需要fun关键字,无须指定函数名
  3. 形参列表位于“->”之前声明,参数类型可以省略
  4. 函数体位于“->”之后
  5. 函数体的最后一个表达式自动作为Lambda表达式返回值,无须使用return关键字(正常情况下,lambda表达式钟不允许使用return关键字,如果要使用return关键字,必须是在内联函数(即该lambda表达式作为实参传入内联函数)

语法格式:

形参列表不用()括住;

	{形参1,...->函数体}

如:

{a:Int,b:Int-> a*b}


{it* it}
  • 当只有一个形参时,可以同时省略形参类型、形参名,那么此时"->"不需要了,lambda表达式可以通过it来代表形参;
  • 第三条省略形参列表参数类型的前提是:可以通过上下文(lambda表达式赋值的变量类型)推断出形参类型:
    如:
var result:(Int)-> Int={n->n*n}

但是下面这种就不行,会报错:

var result={n->n*n}

1.1 调用Lambda表达式

可以像函数一样,将lambda表达式赋值给变量

		var a:(Int)->Int={it *it}

		a(3)

或者lambda表达式作为函数(函数类型形参的函数)调用的实参

list.dropWhile(e->e.lenth>4)

这里由于dropWhile()函数的函数形参(形参类型为(T->boolean))便可以推断出这里e变量的数据类型,因此可以这里可以省略形参类型;如:

  1. 将lambda表达式赋值给变量,而变量声明时指定了类型,这时即可省略lambda表达式的形参类型
  2. 将lambda表达式作为函数实参传递给函数形参,方法定义时指定形参类型,lambda表达式也可以省略形参类型;

也可以直接在lambda表达式后面调用:

	{a:Int->a*a}(3)

2、函数的最后的一个形参是函数类型

函数最后一个形参是函数类型,如果你打算传入一个Lambda表达式实参,允许将lambda表达式写在圆括号之外;

如:

fun foo(a:Int ,b:(Int)->Int):Unit{


	........
}

调用时:

foo(4){
e->e*e	

}

如果函数就只有一个函数类型形参,如果你打算传入一个lambda表达式实参,除了可以将lambda表达式写在圆括号外面,这时可以将圆括号省略

	fun foo(a:(Int)->Int){

		....
	
	}

调用:

	foo{

		e ->e*e

		}

前面我们说当函数形参时可变参数时,应尽量将可变参数形参放在形参列表最后,但是这儿又建议将函数类型形参放在最后,就产生了一个问题:当两种类型形参都存在时,到底两者谁放在最后??

答案:应该将函数类型放在最后,这样函数类型的形参就不用使用命名参数;

3、lambda表达式作为作为函数式接口的实例

Java8中支持lambda表达式作为函数式接口实例,Kotlin也同样支持这功能:

	Var r=Runnable{

		......(run()方法实现)

	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值