10个简单有趣代码,最简单的10个代码

首页 > 时尚 > 作者:YD1662022-12-28 16:40:18

如果没有参数会编译成 Function0,一个参数编译成 Function1,以此类推。FunctionN 重载了操作符 invoke。如下图所示。

10个简单有趣代码,最简单的10个代码(5)

因此我们可以调用 invoke 方法来执行 lambda 表达式。

{ println("lambda 函数体") }.invoke()

当然 Kotlin 也提供了更加简洁的方式,我们可以使用 () 来代替 invoke(),最后的代码如下所示。

{ println("lambda 函数体") }()

到这里我相信小伙伴已经明白了上面代码输出的结果,但是这里隐藏了一个有性能损耗的风险点,分享一段我在实际项目中见到的代码,示例中的代码,我做了简化。

fun main() { (1..10).forEach { value -> calculate(value) { result -> println(result) } } } fun calculate(x: Int, lambda: (result: Int) -> Unit) { lambda(x 10) }

上面的代码其实存在一个比较严重的性能问题,我们看一下反编译后的代码。

10个简单有趣代码,最简单的10个代码(6)

每次在循环中都会创建一个 FunctionN 的对象,那么如何避免这个问题,我们可以将 lambda 表达式放在循环之外,这样就能保证只会创建一个 FunctionN 对象,我们来看一下修改后的代码。

fun main() { val lambda: (result: Int) -> Unit = { result -> println(result) } (1..10).forEach { value -> calculate(value, lambda) } }最后

这里也分享一些珍藏资源,从面试简历模板到大厂面经汇总,从大厂内部技术资料到互联网高薪必读书单,以及Android面试核心知识点(844页)和Android面试题合集2022年最新版(354页)等等,这些资料整理给大家,希望踩过的坑不要再踩,遭遇的技术瓶颈一次性消灭。

如果需要的话,可以顺手帮我点赞评论一下,直接私信我【笔记】免费领取!

Java部分,像序列化、注解、泛型、反射、JVM、编译时、动态代理等等,都是非常重要的,尤其是越往上走越重要,在大厂中是必问的版块,很多中小厂以及校招也会着重考量Java基础

10个简单有趣代码,最简单的10个代码(7)

10个简单有趣代码,最简单的10个代码(8)

上一页12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.