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的函数的输入参数与返回可以也可以是函数的特性,可以组合出更多的玩法。可以使得在代码的编写上都会更加简洁与便捷。

相关推荐
晨曦_子画26 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
大福是小强27 分钟前
005-Kotlin界面开发之程序猿初试Composable
kotlin·界面开发·桌面应用·compose·jetpack·可组合
&岁月不待人&3 小时前
Kotlin by lazy和lateinit的使用及区别
android·开发语言·kotlin
小白学大数据6 小时前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
bytebeats2 天前
Kotlin 注解全面指北
android·java·kotlin
jzlhll1232 天前
kotlin android Handler removeCallbacks runnable不生效的一种可能
android·开发语言·kotlin
&岁月不待人&2 天前
Kotlin 协程使用及其详解
开发语言·kotlin
苏柘_level62 天前
【Kotlin】 基础语法笔记
开发语言·笔记·kotlin
大福是小强2 天前
002-Kotlin界面开发之Kotlin旋风之旅
kotlin·函数式编程·lambda·语法·运算符重载·扩展函数
大耳猫2 天前
Android Studio 多工程公用module引用
android·java·kotlin·android studio