首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【码上开学】Kotlin 的高阶函数、匿名函数和 Lambda 表达式

Kotlin 的高阶函数 大家好,我是扔物线朱凯。Kotlin 很方便,但有时候也让人头疼,而且越方便的地方越让人头疼,比如 Lambda 表达式。...Kotlin 里匿名函数和 Lambda 表达式的本质 我们先看匿名函数。它可以作为参数传递,也可以赋值给变量,对吧? 但是我们刚才也说过了函数是不能作为参数传递,也不能赋值给变量的,对吧?...你能怎么使用双冒号加函数名,就能怎么使用匿名函数,以及怎么使用 Lambda 表达式。 这,就是 Kotlin 的匿名函数和 Lambda 表达式的本质,它们都是函数类型的对象。...在你知道了在 Kotlin 里「函数并不能传递,传递的是对象」和「匿名函数和 Lambda 表达式其实都是对象」这些本质之后,你以后去写 Kotlin 的高阶函数会非常轻松非常舒畅。...表达式来创建匿名类对象,但它本质上还是在创建一个匿名类对象,只是一种简化写法而已,所以 Java 的 Lambda 只靠代码自动补全就基本上能写了。

2.1K20

【Kotlin】Kotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )

八、匿名函数的隐式返回 九、匿名函数参数 十、匿名函数 it 关键字 十一、匿名函数变量类型推断 十二、匿名函数参数类型自动推断 十三、Lambda 表达式 十四、 函数参数为 Lambda 表达式...表达式 ---- 匿名函数 又称为 Lambda 表达式 , 匿名函数的 返回值 是 Lambda 结果 ; 十四、 函数参数为 Lambda 表达式 ---- 在 定义函数 时 , 函数的参数 可以是...表达式 上 , 也就是匿名函数中 , 会提示 Lambda argument should be moved out of parentheses 参数应该移出圆括号 Kotlin 建议我们移除 Lambda...: 在 匿名函数 / Lambda 表达式 / 闭包 中 , 可以 引用 作用域 之外的变量 , 如 : 在 函数 A 中定义了 匿名函数 B , 则 在 匿名函数 B 中 , 可以引用 函数 A 中的变量...; 二十二、Java 中函数作为参数的替代方案 ( 匿名内部类 ) ---- Kotlin 中引入 函数类型 , 将 匿名函数 / Lambda 表达式 / 闭包 作为 函数参数 或 返回值 , 可以写出

2.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Kotlin】函数 ⑤ ( 匿名函数变量类型推断 | 匿名函数参数类型自动推断 | 匿名函数又称为 Lambda 表达式 )

    文章目录 一、匿名函数变量类型推断 二、匿名函数参数类型自动推断 三、Lambda 表达式 一、匿名函数变量类型推断 ---- 定义变量 时 , 如果将变量值 直接赋值给该变量 , 那么就可以 不用显示声明该变量的类型...使用 自动类型推断 确定 匿名函数 的 参数类型 , 则在 匿名函数 的 函数体中 , 必须 显示声明 匿名函数 的 变量名 和 变量类型 ; 匿名函数 返回值 类型 , 是根据 匿名函数 函数体 中...最后一行表达式的值 进行自动推断的 ; 代码示例 : 在下面的函数中 , 匿名函数的函数体中 , 使用 变量名: 变量类型 -> , name: String, age: Int -> , 显示声明了匿名函数的...参数类型 , 这样就可以使用 类型推断 , 自动推断出 匿名函数 的参数类型 ; 该匿名函数 函数体 最后一行表达式 的 类型 是 String 类型 , 其 返回值类型就是 String 类型 ;...表达式 ---- 匿名函数 又称为 Lambda 表达式 , 匿名函数的 返回值 是 Lambda 结果 ;

    74720

    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别

    在Kotlin中,匿名函数和lambda表达式都是用于表示函数类型的匿名函数(即没有名字的函数)。虽然它们在某些情况下可以互换使用,但是它们在语法和使用场景上存在一些细微的差别。...a * b } println(multiply(3, 4)) // 输出: 12 优势 更明确的返回类型: 在匿名函数中,返回类型是显式的,而lambda表达式的返回类型是从上下文推断的。...更复杂的逻辑:匿名函数的语法结构更适合写复杂的逻辑,使代码条理更清晰。 Lambda表达式更适用的场景: 简洁的内联操作:例如在集合操作或常见的函数式编程中,lambda表达式使代码更简洁。...总结 Kotlin的匿名函数和lambda表达式都提供了强大的功能用于表示没有名字的函数,它们在功能上有很大的重叠,但在语法、返回类型和使用场景上有一定的区别和适用性。...在实际开发中,可以根据具体需求选择使用匿名函数或lambda表达式,以达到最佳的代码可读性和性能。

    6310

    Lambda表达式与函数式接口:什么是Lambda表达式?如何在JDK 8中实现匿名函数?

    Lambda表达式与函数式接口:什么是Lambda表达式?如何在JDK 8中实现匿名函数? 引言 在JDK 8之前,写匿名类非常繁琐,代码冗长,特别是用来实现简单的功能时。...如何在JDK 8中使用Lambda表达式实现匿名函数? 掌握Lambda表达式,让你的代码简洁优雅,开发效率倍增!...正文 问题背景:痛点描述 粉丝提问: 猫哥,我听说JDK 8里的Lambda表达式能让代码更简洁,它和函数式接口有什么关系?匿名函数怎么写?...猫头虎解析:Lambda表达式是JDK 8中引入的语法糖,用于简化匿名类实现函数式接口的代码,写起来简单又高效! 核心概念:Lambda表达式与函数式接口 1. 什么是Lambda表达式?...总结:Lambda表达式与函数式接口的优点 特性 优势 Lambda表达式 简化代码,替代冗余的匿名类写法。 函数式接口 提供类型支持,作为Lambda表达式的载体。

    8610

    C#笔记:匿名函数和Lambda表达式

    怎么老是觉得贞子在我的余光中? 首先补充一点课外知识: 1、所谓匿名函数,就是没有名字的函数。(囧)。那没有名字,我怎么去调用它呢?答案就是,必须要一个有名字的委托来间接调用它。(更囧了。...为了不给函数取名字,反而要对委托取名字)。 2、所谓委托,简单说就是指向函数的指针,不要想多了。而且而且,在C#中,同一类型的N个函数(拥有相同类型和返回类型)是可以挂在一个委托下进行链式反应滴。...他是功能无比NB的指针。自带了一个arraylist保存函数链。 今天,我们就用匿名函数来实现C语言中的Printf。 版本一:一般来说,我们可能会这么写。(这不是自欺欺人吗?)...我们通过调用PrintDel委托的一个实例Printff执行相关代码。Printff已经被绑定上了可执行的代码。它指向这一个匿名函数。 版本三:下面介绍我们的lambda 函数。...几乎所有使用匿名委托的地方,都能使用此神器进行简写。

    1.6K41

    转向Kotlin——高阶函数与Lambda表达式

    当然也可以采用Lambda表达式,如下: progress({ name -> name + "上海" }) Lambda表达式和匿名函数 Lambda表达式,或者称为匿名函数,是一种“函数字面值”,也就是一个没有声明的函数...var sum1 = { x: Int, y: Int -> { x + y } } Lambda表达式包含在大括号内,在完整的语法形式中,参数声明在小括号内,参数类型的声明可选,函数体在“->”符号之后...如果Lambda表达式自动推断的返回值类型不是Unit,那么在Lambda表达式函数体中,最后一条(或者是唯一一条)表达式会被当做整个Lambda表达式的返回值。...如果把可以去掉的部分全部省略,可以写成这样: var sum2: (Int, Int) -> Int = { x, y -> x + y } 匿名函数 上面讲到的Lambda表达式语法,还有一点没有说明...调用例如: ints.filter(fun(item) = item > 0) 闭包 Lambda表达式、匿名函数可以访问它的闭包,也就是定义在外层范围中的变量。

    91030

    【Kotlin】函数 ③ ( 匿名函数 | 匿名函数的函数类型 | 匿名函数的隐式返回 )

    文章目录 一、匿名函数 二、匿名函数的函数类型 三、匿名函数的隐式返回 一、匿名函数 ---- 声明函数时 , 没有 函数名 的函数 是 匿名函数 ; 匿名函数 可以作为 函数参数 , 也可以作为 函数返回值...; 匿名函数 可以 定制修改 已有的 函数 , 如 : 标准库中的函数 ; Kotlin 中对 CharSequence 类进行了扩展 , 定义了 count(predicate: (Char) ->...Boolean) 扩展函数 , 接收一个 (Char) -> Boolean 类型的函数 , 用于 返回匹配给定 匿名函数 的字符数 ; /** * 返回匹配给定[谓词 predicate 匿名函数..., 传入了 匿名函数 { letter-> letter == 'l' } 作为参数 , 其作用是 返回 "Hello" 字符串中 , 字符符合 letter == 'l' 要求的字符个数 ; fun...关键字 , 返回返回值 ; 匿名函数 的 返回值 不需要使用 return 关键字 , 匿名函数 可以 隐式 返回 函数体最后一行语句 ; 代码示例 : 在匿名函数中 , 第一行是 Int 值 , 第二行是

    3.1K20

    Python匿名函数lambda的使用

    一、匿名函数介绍 在Python中,不通过def来声明函数名字,而是通过lambda关键字来定义的函数称为匿名函数。...lambda函数能接收任何数量(可以是0个)的参数,但只能返回一个表达式的值,lambda函数是一个函数对象,如果直接赋值给一个变量,这个变量就成了一个函数对象。...语法:lambda 参数:表达式 先写lambda关键字,然后依次写匿名函数的参数,多个参数中间用逗号连接,然后是一个冒号,冒号后面写返回的表达式。...我们使用lambda来实现map中的函数参数。 ?...lambda> at 0x00000254E4C94158> 10101 匿名函数可以作为一个函数的返回值,在上面的代码中,run_func返回的是一个匿名函数,返回的是一个函数对象,当我们执行这个函数时

    3K30

    Go语言之匿名函数和C++的lambda表达式

    0x40c128 60 使用场景: 匿名函数通常比较短小,不希望在这个函数外部使用,这点类似与C++中的lamdba表达式。...补充说明: 匿名函数也可以实现成一个函数数组,使用者可以根据不同的indx来调用不同的匿名函数,这样的话,使用者可以根据自己的需要灵活的使用这些匿名函数。...lambda表达式 C++ 中的lambda表达式是在C++ 11之后才出现的,(备注:这里也只介绍C++ 11)官方文档上说它是闭包类型,笔者个人觉得可以把它理解为一个函数,不过这个函数,有下面一些特性...1.是函数内部的函数,作用域在这个函数内部,出了该函数之后,不能使用。 2.lambda表达式所表示的函数,是没有名字的。 3.通常这个lambda表达式所做的事情,短小精悍。...lambda的编译是当作函数来编译的,识别方法是,编译器看到[的时候就知道是lambda表达式了,然后按照lambda表达式的规则来编译。 如何使用lambda表达式?

    38110

    【Kotlin】Kotlin 中使用 Lambda 表达式替代对象表达式原理分析 ( 尾随 Lambda - Trailing Lambda 语法 | 接口对象表达式 = 接口#函数类型对象 )

    表达式替代对象表达式原理 ---- 1、Lambda 替换对象表达式 在使用 Kotlin 开发时 , 经常遇到这种情况 , 最后一个函数是匿名内部类 , 匿名内部类中只实现了一个函数 , 此时使用 Lambda...} } Lambda 表达式 其本质 就是 函数类型 的 匿名对象 , 也是一个实例对象 , 在堆内存中分配相应的空间 ; 在下面的代码中 , 使用 对象表达式 创建了匿名对象 , 该匿名类实现了 View.OnClickListener...} } 符合以下两个条件 : 函数 接收一个 接口类型 的匿名内部类 或 对象表达式 ; 该 接口类型 中 只定义了一个函数 ; 可以 省略掉 匿名内部类 也就是 对象表达式的定义 , 直接使用 接口中的函数...void onClick(View v); 函数类型 ; 如果 在 setOnClickListener 函数中设置了 (View) -> Unit 类型的 Lambda 表达式 , Kotlin 编译时会查找..., 并且将该 Lambda 表达式作为该匿名内部类的函数实体 ; 如果 传入的 Lambda 表达式类型 , 不符合 接口中的唯一的函数类型 , 也就是再该示例中 Lambda 表达式类型不是 (View

    1.3K20

    闭包(Closure)和匿名函数(Anonymous function)lambda表达式的区别

    闭包(Closure)和匿名函数(Anonymous function)/lambda表达式的区别 函数最常见的形式是具名函数(named function): function foo(){...("anonymouse function") } nameless() 上面的function(){...}就是匿名函数(anonymous function),这个匿名函数也叫做lambda表达式...,即lambda表达式就是匿名函数。...闭包可以具名也可以匿名,上面是具名的形式,可能在很多编程语言无法实现,也可以使用下面的匿名形式: function outer(){ var a = 10; return function...inner(){ console.log(a); }; } outer()() 所以两个是不相同但是相关的概念,总结来说: lambda是没有名字的函数,等价于匿名函数 闭包是作用域闭合于外部函数环境的函数

    1.3K10

    Kotlin学习之高阶函数和Lambda表达式的基础用法

    Kotlin学习之高阶函数和Lambda表达式的基础用法 一、定义和调用高阶函数的写法 kotlin.collections....mapTo()函数会遍历数组中的每个元素,对这个元素调用传入的函数transformation,再将transformation的返回值添加到可变集合destination中,最后返回destination...调用高阶函数的另一个方法是使用匿名函数或Lambda表达式传入所需的参数。...上面调用mapTo()时,如果没有外部定义square函数,就需要使用匿名函数或Lambda表达式传入我们要执行的操作,如下: 或者用Lambda表达式代替匿名函数: 同时,高阶函数还规定,如果高阶函数的最后一个参数是...Lambda表达式,可以把Lambda表达式写在括号外面: 二、Lambda表达式的写法 Lambda表达式的完整写法应该是这样的: 例如之前的sum函数: 但是一般情况下,编译器可以推断出参数的类型,

    61550

    聊聊Kotlin中的lambda

    聊聊Kotlin中的lambda 本质 kotlin中的lambda使用创建类和调用类实现。...ps:因为中间操作符大多使用lambda表达式,是因为它够简单易懂,当调用个lambda表达式时也就会对应的创建多个Functon类和调用其invoke方法 优化方案 java的Lambda背景 java...也就是改变思路:之前我们是将表达式封装到一个类的方法中,具体调用lambda的时候调用这个类的方法 把它换成 我们直接把lambda中的方法体复制到调用方的方法体里面。...inline关键字 Kotlin中可以使用inline将inline修饰的方法复制到调用方。被inline修饰的方法也叫作内联函数。...内联特点 非局部返回 非局部返回:顾名思义全局针对的不是当前方法体 return只作用于当前的函数体。 1.如果lambda中写return编译会报错,lambda中不允许写return关键字。

    1.2K20

    【错误记录】Kotlin 中 Lambda 表达式返回值报错 ( ‘return‘ is not allowed here | 匿名内部类 | 尾随 Lambda 规范 - Lambda 替换接口 )

    规范 - Lambda 替换接口 参考博客 【Kotlin】Kotlin 中使用 Lambda 表达式替代对象表达式原理分析 ( 尾随 Lambda - Trailing Lambda 语法 | 接口对象表达式...= 接口#函数类型对象 ) , 符合 尾随 Lambda 表达式的要求 , 最后一个函数是匿名内部类 , 匿名内部类中只实现了一个函数 , 此时使用 Lambda 表达式替代该 匿名内部类 ; Lambda...表达式 其本质 就是 函数类型 的 匿名对象 , 也是一个实例对象 , 在堆内存中分配相应的空间 ; 在下面的代码中 , 使用 对象表达式 创建了匿名对象 , 该匿名类实现了 BottomNavigationView.OnNavigationItemSelectedListener...接收一个 接口类型 的匿名内部类 或 对象表达式 ; 该 接口类型 中 只定义了一个函数 ; 可以 省略掉 匿名内部类 也就是 对象表达式的定义 , 直接使用 接口中的函数 类型对象 , 也就是 Lambda...这里特别注意 : 在 Kotlin 中 , 在 lambda 表达式或匿名函数中使用 return 语句时 , 必须使用 return@label 语法来指定你要返回的标签 ; 在 Kotlin 中

    13010
    领券