【Android Kotlin】lambda的返回语句和匿名函数

Kotlin Lambda返回值详解:隐式返回、return@label与非局部返回避坑指南 在Kotlin函数式编程中,Lambda表达式是高频使用的核心特性,而最让开发者困惑的往往不是如何定义Lambda,而是它究竟如何返回结果。理解Kotlin的返回机制,需先掌握隐式返回——Lambda体内最后一个表达式的值自动作为结果,无需显式return;同时,显式返回还涉及return@label标签返回,以及内联函数参数中才允许的裸return非局部返回。这些规则直接决定了高阶函数、集合操作(如filter、map)以及作用域函数(如run、let)的返回值行为,也是Android开发与Jetpack 阅读详情

lambda中的返回语句:从一个封闭的函数返回

在一个普通循环中使用return

在传递给forEach的lambda中使用return

如果你在lambda中使用return关键字,他会从调用lambda的函数中返回,并不只是从lambda返回。这样的return语句叫作非局部返回,因为它从一个比包含return的代码块更大的代码块中返回了。我们可以类比在java中的for循环和synchronized代码块,显然会从函数中返回

要注意只有在以lambda作为参数的函数是内联函数的时候才能从更外层的函数返回。上图forEach的函数体和lambda的函数体一起被内联了,所以在编译的时候很容易做到从包含它的函数中返回。在一个非内联函数的lambda中使用return是不允许的。一个非内联函数可以把传给它的lambda保存在变量中,以便在函数返回以后可以继续使用

从lambda返回:使用标签返回

可以在lambda表达式中使用局部返回,lambda中的局部返回跟for循环中的break表达式相似。它会终止lambda的执行,并接着从调用lambda的代码处执行。要区分局部返回和非局部返回,需要用到标签。想从一个lambda表达式返回你可以标记它,然后在return关键字后引用这个标签

要标记一个lambda表达式,在lambda的花括号之前放一个标签名,接着放一个@符号。要从一个lambda返回,在return关键字后放一个@符号,再加上标签名

另一种是使用lambda作为参数的函数的函数名可以作为标签,比如forEach

如果你显式地指定了lambda表达式的标签,再使用作为标签没有任何效果,一个lambda表达式的标签数量不能多于一个

带标签的this表达式

如果你给带接收者的lambda指定标签,就可以通过对应的带有标签的this表达式访问它的隐式接收者

匿名函数:默认使用局部返回

匿名函数看起来和普通函数相似

匿名函数和普通函数由相同的指定返回值类型的规则,代码块体匿名函数需要显式指定返回类型,如果使用表达式函数体就可以省略返回类型

使用表达式函数体匿名函数

在匿名函数中,不带标签的return表达式会从匿名函数返回,而不是从包含匿名函数的函数返回。

规则:return从最近的使用fun关键字声明的函数返回。lambda没有使用fun关键字,所以lambda中的return从最外层的函数返回,而匿名函数使用了fun。尽管匿名函数看起来跟普通函数很相似,但它其实是lambda表达式的另一种语法形式而已

最后

在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。

**如果你觉得自己学习效率低,缺乏正确的指导,可以扫码,加入我们资源丰富,学习氛围浓厚的技术圈一起学习交流吧!


加入我们吧!里面有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

【Kotlin】Kotlin的高阶函数与Lambda表达式 前言 Kotlin的高阶函数与Lambda表达式是Kotlin的特色,使用频率非常高。熟悉它的用法与本质对于简化代码、提升开发效率非常有帮助,也易于阅读kotlin的框架源码。 这两个概念并不是一个东西,但是又有非常紧密的关联。这篇文章带你弄懂什么是高阶函数,以及Lambda表达式的本质和使用。 一、什么是高阶函数 高阶函数就是将函数用作参数或返回值的函数。 函数类型 Kotlin 使用类似 (Int) -> String 的一系列函数类型来处理函数的声明,例如onClick: val onClick 阅读详情

相关推荐

Android Kotlin中的匿名函数和Lambda表达式写法

本文将详细介绍Android Kotlin中匿名函数和Lambda表达式的用法,并通过示例代码演示它们的应用。除了简化语法外,Lambda表达式还可以更好地支持函数式编程的风格,例如使用高阶函数(Higher-order Functions)和函数式接口(Functional Interfaces)。Lambda表达式可以自动推断参数类型和返回类型,因此可以省略参数类型和返回类型的声明。最后,匿名函数可以在任何需要函数作为参数的地方使用,而Lambda表达式更适合于作为高阶函数的参数来使用。

ByteJolt的博客 163

【Kotlin学习】高阶函数的控制流——lambda的返回语句和匿名函数

学习于《Kotlin实战》,本文讲解了关于高阶函数控制流的知识,其中包括lambda的返回语句以及匿名函数的概念

PanicLin的博客 1025

Kotlin基础学习之lambda中return语句详解

前言 当我们爱上lambda并且大范围使用它的时候,我想大家都会被lambda中的return语句狠狠地调戏过,所以今天我们需要一起来揭开lambda中return的神秘面纱。 首先来看一个例子: fun demo() { val indexes = arrayOf(1, 2, 3, 4, 5, 6, 7) indexes.forEach { if (it > 5) { return } println(it) } println(End) } 按照我们的预期,调用demo后,它应该输出: 1 2 3 4 5 End 事实真是如此吗?大家可以运行一下上面

kotlin 中 lambda 表达式的 return 行为

kotlin 带来了许多新的语法(糖?),同时也带来了许多懵逼的地方,看 《kotlin 实战》一书时就被各种 return 的行为搞懵逼了。 在 lambda 表达式中,如果没有显式的 return 语句,那么最后一个表达式就是返回的值。这一行为只有 lambda 表达式才有,常规方法和匿名方法都没有,因为在 kotlin 中 lamb...

weixin_34050005的博客 1369

从CCD数据上报看wxHOOK的封号风险与规避

本文深入分析了微信CCD数据上报机制对wxHOOK的检测逻辑与封号风险,揭示了调试器路径暴露、非白名单DLL加载和内存校验失败等关键风险点。通过实战案例和规避方案,帮助开发者理解如何安全使用wxHOOK技术,避免封号风险,包括内存镜像欺骗、内核级隐蔽和硬件辅助方案等高级技巧。

weixin_27875131的博客 633

CANFD升级踩坑实录:DBC转换时DLC大于8的信号怎么处理?

本文详细探讨了CANFD升级过程中DLC大于8的信号处理问题,提供了工程化解决方案和AutoSar BSW层配置要点。通过分析CAN与CANFD的DLC本质差异,提出信号拆分重组、DLC重映射和协议层适配三种策略,并给出验证与测试方案,帮助开发者避免数据截断和通信故障。

weixin_42521843的博客 231

Kotlin Lambda返回值规则详解:隐式返回、标签返回与Android实战

函数式编程中,Lambda表达式的返回值规则是许多开发者容易踩坑的起点。Kotlin的Lambda与Java不同,它默认以最后一行表达式作为隐式返回值,无需显式写return,但这一机制也带来了类型推断、标签返回和非局部返回等复杂语义。理解这些原理,是掌握高阶函数和Android开发中集合操作、作用域函数(run/let/apply/also/with)的关键。在JVM平台上,filter、map等链式调用频繁依赖Lambda返回值类型,一旦误用极易触发“return not allowed here”或类

weixin_33417488的博客 271

ICC 实战解析——CTS 时钟树综合中的关键设置与优化策略

本文深入解析ICC工具中CTS时钟树综合的关键设置与优化策略,涵盖时钟树异常引脚设置、目标参数配置、非默认布线规则(NDR)等核心技术。通过实战案例展示如何有效控制时钟偏差、优化信号完整性,并平衡功耗与面积,为芯片物理设计提供专业指导。

weixin_30872577的博客 326

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

一、函数头声明、 二、函数参数、 三、Unit 函数、 四、TODO 函数、 五、反引号函数名、 六、匿名函数、 七、匿名函数的函数类型、 八、匿名函数的隐式返回、 九、匿名函数参数、 十、匿名函数 it 关键字、 十一、匿名函数变量类型推断、 十二、匿名函数参数类型自动推断、 十三、Lambda 表达式、 十四、 函数参数为 Lambda 表达式、 十五、Lambda 表达式作为参数的简略写法、 十六、内联函数、 十七、普通函数代码示例、 十八、内联函数代码示例、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2万+

5090D显卡安装LLaMA-Factory避坑指南:PyTorch与CUDA版本兼容性问题解决

本文是针对5090D显卡安装LLaMA-Factory时遇到的PyTorch与CUDA版本兼容性问题的详细解决指南。文章深入剖析了因GPU架构代际差异导致的“no kernel image”报错根源,并提供了从环境诊断、安装匹配的PyTorch Nightly版本,到最终集成验证的完整路径,帮助用户确保LLaMA-Factory在5090D上稳定运行。

Apple的专栏 870

鼎捷T100二次开发实战:如何给开窗功能加上权限锁(附完整代码)

本文详细解析了鼎捷T100二次开发中开窗功能权限锁的实现方法,提供了两种技术方案:开窗程序重构法和动态WHERE条件注入法,并附上完整代码示例。通过真实案例,帮助开发者解决数据权限细粒度控制的难题,提升ERP系统的安全性和实用性。

weixin_28454475的博客 443

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

Kotlin的匿名函数和lambda表达式都提供了强大的功能用于表示没有名字的函数,它们在功能上有很大的重叠,但在语法、返回类型和使用场景上有一定的区别和适用性。在实际开发中,可以根据具体需求选择使用匿名函数或lambda表达式,以达到最佳的代码可读性和性能。欢迎关注我的公众号AntDream查看更多精彩文章!

AntDream的程序世界 1579

Android 13/14/15 默认授权应用权限的实现方法

Android版本修改方式实现原理13/14修改Permission.java将所有权限标记为Normal权限15修改DeviceIdleController.java + DefaultPermissionGrantPolicy.java监听应用安装并主动授权。

m0_60898338的博客 2916

Android kotlin 大全

Android kotlin 入门基础大全前言kotlin 学习目录总结 前言 在学习之前,我们先来了解一下kotlin,在这里,我不会再去介绍kotlin 的发展史,我们直接来说一下我个人对于kotlin 的理解: kotlin 包含了大量的语法糖,在编码的时候,会大大的简化我们的代码量及工作效率,kotlin 中的高阶函数,扩展函数,委托,数据类,密封类,集合操作,可空类型等等。相比传统的Java 语言,kotlin 种大量的简写,可以减少很多用Java 必须要写的样板代码,减少大量的 if…e

半身风雪 9569

node运行项目-Network: unavailable-没有ip地址

vscode运行vue项目后发现Network: unavailable 是什么情况呢?可能有一下三种情况:1.多个网卡原因:打开网络共享中心,把多余的网络禁用掉,只留一个2.在中配置host及public3.系统环境变量问题。

JackieDYH的博客 7540

多出来的那一截:Java 堆外内存 OOM 的来源分账、分流排查与治理解析

Java进程的RES常比-Xmx多出一截,堆却平稳。本文把堆外内存拆成直接缓冲区、Unsafe、JNI本地库、线程栈、元空间与文件映射六类,用JDK 8与17的六组实验对照RSS、NMT、BufferPool三本账:clear()不释放内存;MaxDirectMemorySize默认约等于堆上限且只管直接缓冲区;禁用显式GC会让申请线程退避半秒后失败;未关闭的Deflater零GC下让RSS涨1GB;Netty池内泄漏GC救不回。最后给出定性、对账、定位的排查路线与预算、编码、监控三层治理。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 14万+

Kotlin 高阶函数,匿名函数,Lambda

Kotlin 高阶函数 / 匿名函数 / Lambda 高阶函数 / 匿名函数 / Lambda 高阶函数 : 参数类型 或者 返回值 为 函数类型的函数 ,就称作 高阶函数。 匿名函数: 函数类型的对象,可以作为参数传递, 它它它!不是函数 注意 Lambda:同理 也是一个函数类型的对象 PS:怎么使用 "::" 加 函数 => ‘::’ 标示函数引用,会拿到一个 函数的对象 ;注意不是函数本身! 就怎么使用 匿名函数, 就怎么使用 Lambda 示例代码记录 1. b 函

章鱼哥的博客 507

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Jetpack:009-kotlin中的lambda、匿名函数和闭包

本章回主要介绍了lambda,匿名函数和闭包的概念以及使用方法,并且通过文本结合代码的方式进行了介绍,最后分享了自己的经验。

talk_8的专栏 868

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Kotlin Lambda巩固

}fun a(function: Fun): String{return function(2).toString()}main() {a(b)}在这个例子中: 是一个类,代表传递了的一个函数,类似Java中的 ,像是万能类。但实际上,在Kotlin中,并没有Fun这样的、或者相似的类,来做到用一个万能类来表示任何一个函数式。而Java中,虽然有 这样的类可以进行转化,但我们平时使用的时候还是会有各种各样的转化坑(代码也很挫),所以Kotlin并没有没采取这种做法。Kotlin借鉴了Python等语言方式,

2401_84896814的博客 884

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Kotlin的高阶函数,匿名函数,Lambda表达式

lambda表达式,称为匿名函数,是一种函数字面值,也就是没有声明的函数,但可以作为表达式传递出去.而已lambda表达式或者匿名函数作为函数参数的函数,就是高阶函数 一 函数类型的声明: 在kotlin中,声明一个函数类型的格式很简单,在kotlin中我们是通过->符号来组织参数类型和返回值类型,左右是函数的参数,右边是函数的返回值,函数的参数,必须在()中,多个参数的时候,用,将参数分开。如下: //表示该函数类型,接收一个Int类型的参数,并且返回值为Int类型 (Int)->Int

qq_39431405的博客 1402

10天学会kotlin DAY2 匿名函数 与 Lambda

匿名函数,顾名思义,就是没有名的函数匿名函数 2、函数类型与隐式返回 函数类型的隐式返回 3、函数参数 4、it 关键字特点 5、匿名函数的类型推断 6、Lambda 匿名函数 属于Lambda 7、函数中定义参数 是函数的函数 8、函数内联 如果函数参数有Lambda ,尽量使用 inline 关键字,这样内部会做优化,减少函数开辟,对象开辟,的性能损耗使用内联,相当于C++ #define 宏定义,宏替换,会把代码替换到调用处,没有任何函数的开辟, 对象的开辟,造成性能损耗 如果不使用内联,在调

半身风雪 1243

彻底搞懂Kotlin的高阶函数、匿名函数、Lambda表达式

在Kotlin还没成为Android开发首选语言之前,我们一直是使用Java语言来开发Android应用。不过对于Lambda来说,大家应该并不陌生,因为Android Studio也可以支持JAVA 8中的Lambda表达式,只需要在app的build.gradle中添加以下代码: android { // ... compileOptions { targetCompatibility JavaVersion.VERSION_1_8 sourceCompa

HurryYu的博客 1238
上一篇: Android Studio 高德地图开发(三)定位显示
下一篇: 【Android View】事件分发的过程
不秃头de程序猿
博客等级 码龄5年 4089粉丝 1478原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值