news 2026/8/27 12:18:05

Kotlin标准函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kotlin标准函数

一、标准函数

标准函数是指Standard.kt文件中定义的函数,任何Kotlin代码都可以自由的调用所有标准函数,标准函数有很多我们这里主要学习下几个常用的标准函数。

1.1 apply

apply函数可看作一个配置函数,你可以传入一个接收者,然后调用一系列函数来配置它以便使用,如果提供lambda给apply函数执行,它会返回配置好的接收者。

fun main() { var map = mutableMapOf("帅次" to 18).apply { put("apply-北京",188) put("apply-上海",288) } println(map)//{帅次=18, apply-北京=188, apply-上海=288} }
  • 1、创建可变Map
  • 2、通过apply()函数添加数据

如下,咱们启动一个界面并传参

val intent = Intent(this,NextActivity::class.java).apply { putExtra("name","sc") putExtra("age",19) } startActivity(intent)

可以看到,调用一个个函数类配置接收者时,变量名(map、intent)就省掉了,这是因为,在lambda表达式里,apply能让每个配置函数都作用于接收者,这种行为有时又叫做相关作用域,因为lambda表达式里的所有函数调用都是针对接收者的,或者说,它们是针对接收者的隐式调用

1.2 let

let函数能使某个变量作用于其lambda表达式里,让it关键字能引用它。let与apply比较,let会把接收者传给lambda,而apply什么都不传,匿名函数执行完,apply会返回当前接收者,而let会返回lambda的最后一行

var letData = 20.let { "不知不觉过去 $it 年了" } println(letData)

1.3 also

also函数和let函数功能相似,和let一样,also也是把接收者作为值参传给lambda,但有一点不同:also返回接收者对象,而let返回lambda结果。因为这个差异,also尤其适合针对同一原始对象,利用副作用做事,既然also返回的是接收者对象,你就可以基于原始接收者对象执行额外的链式调用

//also var alsoData = "AndroidSHUAICI" var strAlso = alsoData.also { println(it.length)//14 }.also { println(it.startsWith("Android"))//true } println(strAlso)//AndroidSHUAICI

1.4 run

具备接收者的隐式调用(apply)返回的是lambda的最后一行(let)

//run var str = "Android帅次" var s = str.run { startsWith("Android") } println(s)//true

加强版

fun main() { var runS = str.run { startsWith("Android") println(this)//Android帅次 "吼吼哈嘿"//这里决定下一个run的this类型 }.run { println(this)//吼吼哈嘿 18//这里的18传入到isAge函数 }.run(::isAge) println(runS)//false } fun isAge(age: Int) = age > 15

从上面看出,run支持链式调用,run也支持函数引用。

1.5 with

with函数是run的变体,功能一样,但是调用with时需要值参作为其第一个参数传入

var strWith = "Android帅次" var sWith = strWith.run { startsWith("Android") "run-$this" } println(sWith)//run-Android帅次 sWith = with(strWith) { startsWith("Android") "with-$this" } println(sWith)//with-Android帅次

1.6 takelf

如果需要判断某个条件是否满足再决定是否可以赋值变量或执行某项任务takelf就非常有用,概念上讲,takelf函数类似于if语句,但它的优势是可以直接在对象实例上调用,避免了临时变量赋值的麻烦。

takelf函数需要判断lambda中提供的条件表达式,给出true或false结果:

  • 如果判断结果是true,从takelf函数返回接收者对象。
  • 如果是false,则返回null。
val strTakeIf = "Android帅次" val tkif = strTakeIf.takeIf { it.startsWith("Android")//返回true } println(tkif)//Android帅次 var tkifS= strTakeIf.takeIf { it.startsWith("Android") }.takeIf { println("Length:${it?.length}")//Length:9 it?.length!! > 20//返回false } println(tkifS)//null

1.7 takeUnless

takelf辅助函数takeUnless,只有判断你给定的条件结果是false时,takeUnless才会返回原始接收者对象,跟takelf刚好相反

val strTakeIfUn = "Android帅次" val un = strTakeIf.takeUnless { it.startsWith("Android")//返回true } println(un)//null var un2 = strTakeIfUn.takeUnless { it.startsWith("帅次")//返回false } println(un2)//Android帅次

takeUnless函数有点调皮,了解一下就行。还是感觉takelf比较好理解和使用。

下面给大家分享两份资料:字节跳动内部超高质量Kotlin笔记、谷歌大佬编写高级Kotlin强化实战(附Demo)。

一、字节跳动内部超高质量Kotlin笔记

1.准备开始
  • 基本语法
  • 习惯用语
  • 编码风格
2.基础
  • 基本类型
  • 控制流
  • 返回与跳转

3.类和对象
  • 类和继承
  • 属性和字段
  • 接口
  • 可见性修饰词
  • 扩展
  • 数据对象
  • 泛型
  • 嵌套类
  • 枚举类
  • 对象表达式和声明
  • 代理模式
  • 代理属性
4.函数和lambda表达式
  • 函数
  • 高阶函数与 lambda 表达式
  • 内联函数

5.其它
  • 多重申明
  • Ranges
  • 类型检查和自动转换
  • This表达式
  • 等式
  • 运算符重载
  • 空安全
  • 异常
  • 注解
  • 反射
  • 动态类型
6.互用性
  • 动态类型

7.工具
  • 使用Maven
  • 使用 Ant
  • 使用 Gradle
  • 使用Griffon
8.FAQ
  • 与java对比
  • 与Scala对比

需要的朋友只需要你点赞支持,然后点击这里免费获取。

基础知识掌握之后就是靠实战提升了!

二、谷歌大佬编写高级Kotlin强化实战(附Demo)

照样目录乘上:

第一章 Kotlin入门教程

第二章 Kotlin 实战避坑指南

第三章 项目实战《Kotlin Jetpack 实战》


篇幅有限,详细内容就不作完全展示了,欢迎大家一键三连,若需要此面试题合集,直接点击下方CSDN官方认证微信卡片免费领取【保证100%免费】~↓↓↓

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 12:17:49

100V输入无光耦反激电源设计:原边反馈原理与实操

前段时间做了一块板子,需求方只丢过来一行字:100-V No-Opto Flyback Regulator。翻译成大白话就是:输入直流母线最高到100V,输出一路隔离的稳压电源,拓扑用反激,反馈不能走光耦。样机调了两周,后…

作者头像 李华
网站建设 2026/8/27 12:16:37

LoRaWAN集成方案解析:PSoC 6与SX126x如何加速智能门锁开发

做物联网硬件开发这几年,有一个问题几乎每个产品定义会上都会撞上:无线连接到底选什么?WiFi 功耗太大,蓝牙距离不够,NB-IoT 要插卡还要算资费。剩下的选项里,LoRaWAN 在低功耗和覆盖距离上确实能打&#xf…

作者头像 李华
网站建设 2026/8/27 12:16:13

WPF图标制作,图形设计转换为矢量Path。

前言 在软件开发过程中,图形元素必不可少,而在WPF中如果使用jpg或png等格式,在应用到Button等控件时的样式时,常常需要做MouseEnter,MouseDown鼠标事件提供不同的颜色或特效。一个图标得分别生成三种颜色才行。如下: N…

作者头像 李华
网站建设 2026/8/27 12:12:16

bug分析记录-添加商品列表没有出现商品

问题1:商品管理列表中添加商品后,商品列表没有看到该条商品记录 分析: 第一步:查看数据库表中是否有添加的数据。 情况①:数据库表中有商品记录,则添加成功,分析判断大概率是列表查询问题&#…

作者头像 李华
网站建设 2026/8/27 12:12:16

数学建模实战:AHP-熵权-TOPSIS组合模型在综合评价中的应用

1. 从“影响评价”到“数据驱动决策”:一个建模者的实战复盘去年带队参加电工杯,B题“人工智能对大学生学习影响的评价”一出来,我们团队就意识到,这绝不是一个简单的“好”或“坏”的判断题。它本质上是一个典型的多指标综合评价…

作者头像 李华