当前位置: 首页 > news >正文

Kotlin 作用域函数 - let 函数、run 函数

let 函数

1、基本介绍
@kotlin.internal.InlineOnlypublicinlinefun<T,R>T.let(block:(T)->R):R{contract{callsInPlace(block,InvocationKind.EXACTLY_ONCE)}returnblock(this)}
  1. let 是泛型扩展函数

  2. 在配合?.时,将调用者 T 对象作为参数传递给 Lambda,在 Lambda 内部通过 it 访问,避免空指针

  3. 如果不配合?.,it 可能为 null

  4. 返回 Lambda 的执行结果 R

  5. 通过 inline 关键字内联,避免函数对象开销(让编译器直接把代码“复制粘贴”到调用处,而不是真的创建一个函数对象去调用)

2、演示
  1. 这里会执行,因为对象不为 null
varstr:String?="Hello, Kotlin!"str?.let{println(it.length)}println("结束")
# 输出结果 14 结束
  1. 这里不会执行,因为对象为 null
varstr:String?=nullstr?.let{println(it.length)}println("结束")
# 输出结果 结束

run 函数

1、基本介绍
@kotlin.internal.InlineOnlypublicinlinefun<R>run(block:()->R):R{contract{callsInPlace(block,InvocationKind.EXACTLY_ONCE)}returnblock()}
@kotlin.internal.InlineOnlypublicinlinefun<T,R>T.run(block:T.()->R):R{contract{callsInPlace(block,InvocationKind.EXACTLY_ONCE)}returnblock()}
  1. run 是一个作用域函数,接收一个 lambda 表达式并在其作用域内执行

  2. run 函数分为扩展函数与非扩展函数,扩展函数对调用者 T 执行 lambda,内部通过 this 访问上下文,返回 lambda 结果,非扩展函数是独立作用域,无需上下文对象

  3. run 函数通过 inline 关键字内联,避免函数对象开销

2、演示
  1. 创建独立作用域
valresult=run{valx=10valy=20x+y}println(result)
# 输出结果 30
  1. 使用临时变量
valvalue=100valprocessed=run{valvalue=50value*2}println("外部 value:$value")println("计算结果:$processed")
# 输出结果 外部 value: 100 计算结果: 100
  1. 对象配置与计算
dataclassPerson(varname:String,varage:Int)valperson=Person("Alice",25)valresult=person.run{age+=1name="$nameSmith""姓名:$name, 年龄:$age"}println(result)
# 输出结果 姓名: Alice Smith, 年龄: 26
  1. 空安全检查
valcontent:String?="Hello"vallength=content?.run{println("字符串:$this")length}?:0println(length)
# 输出结果 字符串: Hello 5
http://www.jsqmd.com/news/362365/

相关文章:

  • 重庆高中补习机构Top5:本土化教研、分层教学与全流程督学谁更强? - 深度智识库
  • 如何通过 C# 将 TXT 文本转换为 PDF
  • 影音不再杂乱还能告别地域限制!Plex+cpolar 打造随身私人影院
  • 剑桥英语培训班哪家靠谱:YLE-KET-PET备考新东方比邻成全能优选 - 资讯焦点
  • 建筑领域镀锌方矩管优质厂家推荐 - 资讯焦点
  • Java 内存泄漏原因(长生命周期的对象持有短生命周期对象的引用、未正确关闭资源等)
  • 2026国内最新孕期护理公司top3推荐!服务深度覆盖广州、天河、黄埔等地,优质月子中心权威榜单发布,科学护理助力母婴健康 - 品牌推荐2026
  • 2025长沙文旅10大热门需求实测推荐:青天寨农庄,丛林飞跃(树上探险)/亲子游首选(2026干货汇总) - 资讯焦点
  • AI时代的“工具自由“:我是如何进入细糠时代的
  • Swisse的“蓝帽子难红”
  • 中国十大品牌冬虫夏草综合实测排名,锁鲜工艺与品质双维度深评 - 资讯焦点
  • 数字孪生+AI:某世界级物联网企业-产线数智化升级,点亮智造之路v
  • 江苏做产品洞察哪家靠谱?竞品追踪、知识图谱研判与实时趋势洞察深度对比(附选型指南) - 资讯焦点
  • 防关联浏览器和VPS哪个好用?不了解的一定要看看! - Roxy指纹浏览器
  • 2026十大优质图片素材网站推荐,涵盖高清免费可下载图库、商用图片购买网站 - 品牌2026
  • 灵芝孢子油哪个牌子最好最正宗?2026十大领军品牌揭晓,央视聚焦的高含量优品盘点 - 资讯焦点
  • 一天一个开源项目(第17篇):ViMax - 多智能体视频生成框架,导演、编剧、制片人全包
  • 73、IMX6ULL Linux按键驱动实战:从GPIO轮询到设备树中断+等待队列
  • 2026全年龄段益生菌推荐指南,认准这6款安全有效品牌 - 资讯焦点
  • 运维效率翻倍!服务器监控告警 + 内网穿透,异地管理超省心
  • 聊城车牌靓号代选,聊城车牌靓号价格-上牌选号 - dasggg
  • 智能农产品检验通信系统的设计与实现
  • 【计算机毕设】4S店车辆管理系统
  • 【深度学习新浪潮】如何评价Kaiming He新作《Generative Modeling via Drifting》?
  • 智能气候控制箱控制系统设计
  • 2026年2月份吊扇灯优质品牌推荐指南适配家居风格 - 资讯焦点
  • 智能配电网自愈功能研究
  • 【AI黑话日日新】什么是PPO?
  • 2026国内最新月子中心top10推荐!服务深度覆盖广州/天河/黄埔/海珠/越秀/白云/荔湾等地,优质机构权威榜单发布 - 品牌推荐2026
  • AI写论文高效省心!6款论文AI生成工具实测,高质量论文一键生成 - 资讯焦点