kotlin 常用函数

Kotlin 作用域函数详解:applylet等五大函数对比

Kotlin 提供了多个作用域函数(Scope Functions),它们都是在对象的上下文中执行代码块的扩展函数。最常用的五个是:letrunwithapplyalso。它们的主要区别在于:

  1. 1.

    引用对象的方式​(thisit

  2. 2.

    返回值类型​(返回上下文对象本身或返回 lambda 结果)

下面是详细对比和使用场景:

📊 五大作用域函数对比表

函数

上下文对象引用

返回值

是否扩展函数

典型使用场景

let

it

lambda 结果

非空检查、转换对象

run

this

lambda 结果

对象配置并计算结果

with

this

lambda 结果

对已有对象进行分组操作

apply

this

对象本身

对象初始化配置

also

it

对象本身

执行附加操作(日志、验证等)


🧩 详细解析与代码示例

1. let函数

  • 引用对象​:it

  • 返回值​:lambda 的最后一行

  • 主要用途​:安全调用非空对象、对象转换


kotlin

复制

// 示例1: 安全调用
val name: String? = "Kotlin"
val length = name?.let {
    println("Name is $it")
    it.length // 返回值
} ?: 0 // 如果为null则返回0

// 示例2: 链式转换
val numbers = listOf(1, 2, 3)
val doubled = numbers.map { it * 2 }
    .let { 
        println("Doubled: $it")
        it.filter { num -> num > 3 } // 返回值
    }

2. run函数

  • 引用对象​:this(可省略)

  • 返回值​:lambda 的最后一行

  • 主要用途​:对象配置并计算结果


kotlin

复制

val rectangle = Rectangle().run {
    width = 100
    height = 50
    calculateArea() // 返回值
}

println("Area: $rectangle") // 输出面积

3. with函数

  • 引用对象​:this(可省略)

  • 返回值​:lambda 的最后一行

  • 主要用途​:对已有对象进行分组操作(非扩展函数)


kotlin

复制

val builder = StringBuilder()
val result = with(builder) {
    append("Hello")
    append(" Kotlin")
    toString() // 返回值
}

4. apply函数

  • 引用对象​:this(可省略)

  • 返回值​:对象本身

  • 主要用途​:对象初始化配置


kotlin

复制

// 创建并配置Intent
val intent = Intent().apply {
    action = "com.example.ACTION"
    putExtra("key", "value")
    flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
// intent 已配置好,可以直接使用

5. also函数

  • 引用对象​:it

  • 返回值​:对象本身

  • 主要用途​:执行附加操作(日志、验证等)


kotlin

复制

val user = User().also {
    println("User created: $it")
    validateUser(it) // 执行验证但不影响返回值
}.apply {
    name = "Alice"
    age = 30
}
常用Kotlin拓展函数有以下几种: 1. 使用context的扩展函数:可以直接在context对象上调用dp2px函数,将dp值转换为px值。例如:val pxValue = context.dp2px(10) \[1\] 2. 使用Float的扩展函数:可以直接在Float对象上调用dp2px函数,将dp值转换为px值。例如:val pxValue = 10F.dp2px(context) \[1\] 3. 使用lambda表达式的高阶函数:可以使用lambda表达式更简洁地使用Kotlin的高阶函数。例如,可以直接传入匿名函数或使用Lambda表达式进行简化。\[3\] 4. 根据已有函数构造函数类型变量:可以使用函数引用(::)将已有函数转化为函数类型变量,然后传递给其他函数使用。例如,可以将printInt函数转化为(Int) -> Unit类型的函数参数。\[3\] 这些拓展函数的使用可以提高代码的可读性、简洁性和灵活性,同时避免函数名冲突。\[2\] #### 引用[.reference_title] - *1* *2* [kotlin扩展函数](https://blog.youkuaiyun.com/flytosky21/article/details/129978317)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Kotlin高阶函数、内联函数、内联拓展函数](https://blog.youkuaiyun.com/weixin_56769444/article/details/121346864)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值