Kotlin中Lambda表达式与高阶函数使用分析讲解

 更新时间:2022年12月06日 15:12:35   作者:go2coding  
lambda 本质上是可以传递给函数的一小段代码,Kotlin 与 Java 中的 Lambda 有一定的区别,除了对 lambda 的全面支持外,还有内联函数等简洁高效的特性。下面我们来仔细看一下

编程语言的发展,通过需求,不断的变化出新的特性,而这些特性就会使得编程变得更加的简洁。

Lambda表达式

Lambda表达式的出现,一定程度上使得函数和变量慢慢的融为一体,这样做的好处大大的方便了回调函数的使用。

在很多的情况下,其实我们的函数就只有简单的几行代码,用fun就感觉有点重了,而且有的时候这么大的函数结构用起来,并不是非常的方便。

Lambda表达式,其表达式为: {变量定义 -> 代码块}

其中:

lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数

        val sum:(Int,Int) -> Int =  {x: Int, y: Int -> x + y}
        println(sum(1,1))

通常对于求和的代码,不过是普通的几句代码,如果定义一个函数会有点麻烦,这里把函数 看成一个变量,后面我们就可以知道这种写法的威力。

Lambda表达式 中,使用(Int,Int) -> Int 来定义变量的类型,也就是函数的类型了。当然这一个Lambda表达式 可以简化为:

        val sum =  {x: Int, y: Int -> x + y}
        println(sum(1,1))

-> 符号代表的是,参数到返回值。

高阶函数

函数中带有以函数为参数,就称为高阶函数,在c语言中,通常是以函数指针传递给函数参数,在Kotlin 中会演变的更加的简单。

如我们定义一个幂函数的算法,

    fun powerAlgorithm(x:Int,power:(a:Int)->Int):Int{
        return  power(x)
    }

至于多少次方,通过power来控制。如我们求三次方:

println(powerAlgorithm(2,{<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->x:Int->x*x*x}))

结果打印如下:

I/System.out: 8

再看一个更简便的写法:

        var power3 = powerAlgorithm(2){
            it*it*it
        }

这里有两点,回调函数我们可以用另外一个{}中直接编写,it是一个隐藏的变量。当 lambda 中只有一个参数时,it 就可以用来代表自己。这就是我们一直讲的这个it,之前我们还不知道怎么一回事。

其实这种写法 kotlin中,我们已经非常的常见了,比如map函数。

map函数,对每个函数做一次同样的操作,如 对链表中的数据 做两倍的处理:

        var numList:MutableList<Int1> = mutableListOf(1,2,3,4,5)
        var num2 = numList.map{it*2}

这里的it就是那么个意思, lambda 中只有一个参数时,it 就可以用来代表自己。

简化写法,使用withapply

        tvTest.setText("hello with")
        tvTest.setBackgroundColor(R.color.white)
        with(tvTest){
            setText("hello with")
            setBackgroundColor(R.color.white)
        }
        tvTest.apply {
            setText("hello apply")
            setBackgroundColor(R.color.black)
        }
        var str = HashMap<String,kotlin.Int>().apply {
            this["age"] = 1
            this["num"] = 8
        }

为了避免tvTest 的多处使用,我们集中在with(tvTest) 中使用,同样的apply 也可以这样做,apply 可以在变量初始化的时候做,避免重复的变量多写了很多次。

还有run也是同样的用法,多了一个功能:最后一行会自动被认为是返回值类型

        var len:kotlin.Int = str.run {
            count()
        }

len的值这时候为2

小结

我们通过了函数的高级特性,知道了一些Kotlin 很好的特性,这些在后面的编程中,都起到了很好的作用,我们不需要在写那么多的函数,有的时候还找不到函数定义的地方,Lambda 使得 整个的回调函数看起来非常的简单,但是如果太熟悉c语言的语法,这可能还重新适应一下。

到此这篇关于Kotlin中Lambda表达式与高阶函数使用分析讲解的文章就介绍到这了,更多相关Kotlin Lambda与高阶函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android初学者必须知道的10个技术

    Android初学者必须知道的10个技术

    本篇内容给大家整理10个作为Android初学者必须要了解和会用的技术以及详细代码分析,需要的朋友收藏下慢慢学习吧。
    2017-12-12
  • 详解Android中常见的内存优化及内存泄露场景

    详解Android中常见的内存优化及内存泄露场景

    本文主要给大家介绍了Android中常见的内存优化及Android开发中容易造成内存泄露的场景,对我们的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-08-08
  • kotlin使用Dagger2的过程全纪录

    kotlin使用Dagger2的过程全纪录

    Dagger2是一款基于Java注解,在编译阶段完成依赖注入的开源库,主要用于模块间解耦,方便进行测试。下面这篇文章主要给大家介绍了关于kotlin使用Dagger2的过程的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2018-03-03
  • Android 开发线程的分析

    Android 开发线程的分析

    这篇文章主要介绍了Android 开发线程的分析的相关资料,需要的朋友可以参考下
    2017-04-04
  • Android返回键功能的实现方法

    Android返回键功能的实现方法

    这篇文章主要介绍了Android返回键功能的实现方法,实例分析了Android返回键的原理与具体的功能实现代码,非常具有实用价值,需要的朋友可以参考下
    2015-02-02
  • Android中实现OkHttp上传文件到服务器并带进度

    Android中实现OkHttp上传文件到服务器并带进度

    本篇文章主要介绍了Android中实现OkHttp上传文件到服务器并带进度,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Android完整Socket解决方案

    Android完整Socket解决方案

    这篇文章主要介绍了Android完整Socket解决方案并通过代码给大家做了实例分析,对此有兴趣的朋友学习下。
    2018-02-02
  • Android 下载并打开PDF,Doc,Dwg文档实例

    Android 下载并打开PDF,Doc,Dwg文档实例

    本篇文章主要介绍了Android 下载并打开PDF,Doc,Dwg文档实例,具有一定的参考价值,有兴趣的可以了解一下。
    2017-04-04
  • android实现动态显隐进度条

    android实现动态显隐进度条

    这篇文章主要为大家详细介绍了android实现动态显隐进度条,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Android中SwipeBack实现右滑返回效果

    Android中SwipeBack实现右滑返回效果

    这篇文章主要介绍了Android中SwipeBack实现右滑返回效果的相关资料,需要的朋友可以参考下
    2016-02-02

最新评论