Kotlin中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与高阶函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Kotlin 使用高阶函数实现回调方式

    lambda 和 高阶函数 之前学习了 lambda 和高阶函数,然后在 android 开发中对 onClick 事件进行监听是一个很常用的功能,kotlin 的常规实现如下: rootView.setOnClickListener { view -> println("点击了这个ID=${view.id}的view") } 然后在开发中不可避免的我们也要写一些自定义监听之类的代码.这个时候如果还用 java 的思想去实现的话就有点舍近求远了. java 思想实现 在 java

  • 详解Kotlin 高阶函数 与 Lambda 表达式

    详解Kotlin 高阶函数 与 Lambda 表达式 高阶函数(higher-order function)是一种特殊的函数, 它接受函数作为参数, 或者返回一个函数. 这种函数的一个很好的例子就是 lock() 函数, 它的参数是一个锁对象(lock object), 以及另一个函数, 它首先获取锁, 运行对象函数, 然后再释放锁: fun <T> lock(lock: Lock, body: () -> T): T { lock.lock() try { return body()

  • Kotlin方法与Lambda表达式实践使用介绍

    目录 前言 一.Kotlin的方法 1.方法声明 2.方法参数 3.方法作用域 二.Lambda表达式 1.Lambda表达式的特点 2.Lambda实践 总结 前言 经过前面对 Kotlin 的介绍,相信大家已经能对 Kotlin 有了一个基本的认识. 从这节开始,我就为大家讲解 Kotlin的方法以及Lambda表达式等高级操作. 一.Kotlin的方法 1.方法声明 fun functionLearn(days: Int): Boolean { return days > 100 } 成员

  • 拥抱kotlin之如何习惯使用kotlin高阶函数

    前言 kotlin提供了高阶函数这个概念,可以在一些场景提高编码效率 一.什么是高阶函数 通俗的说和数学里面的高阶函数概念类似,也就是函数里面的参数可以是函数.当然返回值也可以是函数. 二.kotlin高阶函数使用场景分析 1.先看看平时使用比较多的内置高阶函数 用kotlin写view的onClickListener tV.setOnClickListener { //doSomeThing } 里面的lamba表达式就是一个函数 不太形象?再看看集合里面的filter.map listOf(

  • Kotlin Lambda表达式实践使用介绍

    目录 集合的创建和遍历方式 集合的函数式API 集合的创建和遍历方式 集合只要包含List和Set在宽泛一些就包括Map这种键值对类型的数据结构 List,Set和Map在java当中都是接口,其中List的主要实现类是ArrayList和LinkedList,Set的主要用的实现类是HashSet,Map主要用的实现类是HashMap 现在我们要创建一个水果集合来放水果,在Kotlin当中可以这样写 val list = ArrayList<String>() list.add("

  • Kotlin中的高阶函数深入讲解

    前言 在Kotlin中,高阶函数是指将一个函数作为另一个函数的参数或者返回值.如果用f(x).g(x)用来表示两个函数,那么高阶函数可以表示为f(g(x)).Kotlin为开发者提供了丰富的高阶函数,比如Standard.kt中的let.with.apply等,_Collectioins.kt中的forEach等.为了能够自如的使用这些高阶函数,我们有必要去了解这些高阶函数的使用方法. 函数类型 在介绍常见高阶函数的使用之前,有必要先了解函数类型,这对我们理解高阶函数很有帮助.Kotlin 使用

  • 玩转Kotlin 彻底弄懂Lambda和高阶函数

    Lambda是什么 简单来讲,Lambda是一种函数的表示方式(言外之意也就是说一个Lambda表达式等于一个函数).更确切的说:Lambda是一个未声明的函数,会以表达式的形式传递 为什么要用Lambda 设想一下,在Android中实现一个View的点击事件,可以使用如下实现: View view = findViewById(R.id.textView); view.setOnClickListener(new View.OnClickListener() { @Override publ

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

    目录 Lambda表达式 高阶函数 小结 编程语言的发展,通过需求,不断的变化出新的特性,而这些特性就会使得编程变得更加的简洁. Lambda表达式 Lambda表达式的出现,一定程度上使得函数和变量慢慢的融为一体,这样做的好处大大的方便了回调函数的使用. 在很多的情况下,其实我们的函数就只有简单的几行代码,用fun就感觉有点重了,而且有的时候这么大的函数结构用起来,并不是非常的方便. Lambda表达式,其表达式为: {变量定义 -> 代码块} 其中: lambda 函数是一个可以接收任意多个

  • 实例讲解C++编程中lambda表达式的使用

    函数对象与Lambdas 你编写代码时,尤其是使用 STL 算法时,可能会使用函数指针和函数对象来解决问题和执行计算.函数指针和函数对象各有利弊.例如,函数指针具有最低的语法开销,但不保持范围内的状态,函数对象可保持状态,但需要类定义的语法开销. lambda 结合了函数指针和函数对象的优点并避免其缺点.lambda 与函数对象相似的是灵活并且可以保持状态,但不同的是其简洁的语法不需要显式类定义. 使用lambda,相比等效的函数对象代码,您可以写出不太复杂并且不容易出错的代码. 下面的示例比较

  • 详解JavaScript 高阶函数

    高阶函数简介 高阶函数 的英文名叫 Higher-Order Function ,是 函数式编程 中的一种.他的表现形式往往是通过把函数作为参数传入另一个函数,或者将函数作为另一个函数的返回值返回.在实际开发业务中, 高阶函数往往可以抽象我们的代码 ,将我们的命令式编程转换为复用性更高级的函数式编程,从而 提升我们的代码质量 . 下面拿3个面试中常问的高阶函数举例子,希望看完以后能够提升大家对JS的理解,提高我们的代码质量. chat is cheap,show you my code~ Arr

  • JS 5高阶函数分享

    目录 1.前言 2.递归 3.回调函数 3.1匿名回调函数 3.2带参数的回调函数 3.3回调函数的优缺点 4.自调函数 5.为值的函数 6.闭包 1.前言 在JavaScript中,函数实际上也是一个数据,也就是说函数也可以赋值给一个变量.本篇文章就来介绍一些JavaScript中的高阶函数的用法. 2.递归 所谓的递归,就是指函数自己调用自己:用一个故事来说呢就是:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和

  • 分享5个JS 高阶函数

    目录 1.前言 2.递归 3.回调函数 3.1匿名回调函数 3.2带参数的回调函数 3.3回调函数的优缺点 4.自调函数 5.为值的函数 6.闭包 1.前言 在JavaScript中,函数实际上也是一个数据,也就是说函数也可以赋值给一个变量.本篇文章就来介绍一些JavaScript中的高阶函数的用法. 2.递归 所谓的递归,就是指函数自己调用自己:用一个故事来说呢就是:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和

  • C#中的高阶函数介绍

    介绍 我们都知道函数是程序中的基本模块,代码段.那高阶函数呢?听起来很好理解吧,就是函数的高阶(级)版本.它怎么高阶了呢?我们来看下它的基本定义: 1:函数自身接受一个或多个函数作为输入 2:函数自身能输出一个函数.  //函数生产函数   满足其中一个就可以称为高阶函数.高阶函数在函数式编程中大量应用.c#在3.0推出Lambda表达式后,也开始慢慢使用了.   目录 1:接受函数 2:输出函数 3:Currying(科里化) 一.接受函数 为了方便理解,都用了自定义. 代码中TakeWhil

随机推荐