kotlin里的lambda表达式

kotlin里的lambda表达式

导读

当开始学习kotlin的时候,特别是从传统语言转过来开发kotlin的同学,或者是从零开始学习kotlin的同学,非常困惑的,估计是一些以前没见过的,或者比较少用的一些语法糖。在这些语法糖中,虽然不影响代码的粗粒度的逻辑分析,但在分析细节的时候,却会往往搞不清楚参数的传递方向或者调用逻辑,会使得自己产生非常大的困惑,从而在学习的时候担误不少的时间。所以就希望能过这篇文章重新整理一下自己的思绪。 ##常见的语法糖

函数简化

在kotlin中,函数的声明或者使用,还是比较简单的,语法基本上与其他语言一致,只是关键词有一定差别。

kotlin 复制代码
fun sum(a: Int, b: Int):Int{
    return a + b;
}
#调用
sum(2,3); //输出 :5

从上述例子比较容易得到函数定义及调用的模板为

kotlin 复制代码
关键字 函数名称(入参名称:入参类型):返回类型{
    //逻辑代码
    return 返回值
}
#调用方式
函数名称(入参);
```kotlin
当一个函数中,逻辑代码只有一个表达式的情况下,可以省略掉大括号,用等号代替。
```kotlin
fun sum1(a: Int, b: Int):Int = a + b;
#调用
sum1(3,4);//输出7

在返回值的类型确定的情况下,返回类型也可以省略

kotlin 复制代码
fun sum2(a: Int, b: Int) = a + b;
#调用
sum2(3,4);//输出7

lambda表达式

当前流行的语言中,无一例外,都会支持lambda表达式,并且基于lambda表达式还可以有很多高阶的玩法。kotlin是一个集多种语言优点于一身的语言,所以明显地也支持lambda表达式。一个简单的lambda表达式如下

css 复制代码
{x:Int -> x+3}

一个lambda表达式的所有代码包含在一对{}中,使用->作为分隔,-> 左边的是参数(x:Int),一个lambda表达式可以有一个或多个参数,也可以没有参数。如果一个lambda表达式不需要输入参数的话,那么包括->符号之前的所有代码都不需要,只保留主体逻辑代码即可 ->的右边的是主体逻辑代码,不限行数,其中最后一行代码作为返回值返回

将表达式赋给变量

还是上述的例子,当将上述代码赋给一个变量的时候,变量获取到的,不是该表达式的返回值,而是该表达式的地址。相当于是给上述例子的加了个别名。

kotlin 复制代码
val add={x:Int -> x+3}

此时则可以通过该别名来调用该表达式

kotlin 复制代码
add(2); //2+3,输出:5

lambda表达式的类型

接着上面的例子,在我们定义变量的时候,完整的语法是会带上类型的,如 val a:Int =2,这里a的类型就是Int,如果kotlin的编译器可以推导出变量的类型,则可以忽略掉类型的定义,直接写成val a=2。那么上面的例子的完整写法是怎样的呢。 其实lambda表达式也是一种类型,只要能让编译器知道输入、输出是什么类型,有几个输入参数即可。上述例子的输入是一个Int,返回的也是一个Int,那么他的类型为(Int)->Int,完整的写法则是这样: """kotlin val add:(Int)->Int ={x:Int -> x+3} """ 逻辑主体的的类型可以从变量的类型推导得出,所以可以省略掉也是没有问题的。 """kotlin val add:(Int)->Int ={x -> x+3} """

lambda中的it

在看网上的一些kotlin代码例子的时候,经常会看到有it 这个变量,it 这个变量怎么来的呢?当一个lambda表达式中,只有一个输入参数,并且该参数的类型编译器是可以推导出来的,那么在{}里,->前面部分可以省略掉,并用it变量来替代输入的形参,所以上述例子可以修改为这样: """kotlin val add:(Int)->Int ={it+3} """

总结

lambda表达式的基础基本上由上述特性组成,结合kotlin的函数的输入参数与返回可以也可以是函数的特性,可以组合出更多的玩法。可以使得在代码的编写上都会更加简洁与便捷。

相关推荐
一丝晨光4 小时前
逻辑运算符
java·c++·python·kotlin·c#·c·逻辑运算符
消失的旧时光-19436 小时前
kotlin的密封类
android·开发语言·kotlin
AntDreamer13 小时前
在实际开发中,如何根据项目需求调整 RecyclerView 的缓存策略?
android·java·缓存·面试·性能优化·kotlin
极客先躯1 天前
java和kotlin 可以同时运行吗
android·java·开发语言·kotlin·同时运行
滴水成冰-3 天前
Kotlin-Flow学习笔记
笔记·学习·kotlin
_Shirley3 天前
android.view.InflateException: Binary XML file line #7: Error inflating class
android·xml·java·ide·kotlin·android studio
ChinaDragonDreamer3 天前
Kotlin:1.9.0 的新特性
android·开发语言·kotlin
帅次5 天前
Android Studio:驱动高效开发的全方位智能平台
android·ide·flutter·kotlin·gradle·android studio·android jetpack
深海呐5 天前
Android 用线程池实现一个简单的任务队列(Kotlin)
android·kotlin·线程池·延时任务队列·线程池延时任务
我命由我123457 天前
Kotlin 极简小抄 P2(插值表达式、运算符、选择结构赋值)
android·java·开发语言·后端·kotlin·安卓