Kotlin - 标准函数(with、run和apply)

简介: Kotlin - 标准函数(with、run和apply)

Kotlin的标准函数是指 Standard.kt 文件中定义的函数,任何Kotlin代码都可以自由地调用所有的标准函数。

内置函数的总结:

let:

1.let函数返回类型,是根据匿名函数最后一行的变化而变化

2.let函数的匿名函数里持有的是it == 集合本身

apply:

1.apply函数返回以及返回类型,一直都是info,如果是aaa,则需要时aaa.length()

2.apply函数的 匿名函数里持有的是this == info本身

run:

1.run函数返回类型,是根据匿名函数最后一行的变化而变化 (此条==let)

2.run函数的匿名函数里持有的this == str本身 (此条和apply一样)

with :

1.with 函数返回类型,是根据匿名函数最后一行的变化而变化 (此条==let)

2.with 函数的匿名函数里持有的this == str本身 (此条和apply一样)

 

1.with 函数


首先先从with函数开始,with函数接受两个参数,第一个参数可以是一个任意类型的对象,第二个参数是一个Lambda表达式。with函数会在Lambda表达式中提供第一个参数对象的上下文,并且使用Lambda表达式中的最后一行代码作为返回值进行返回,代码如下:

val with = with(obj) {
//这里是 obj 的上下文
"value" //with 函数的返回值
}

那么这个函数有什么用? 它可以在连续操作同一个对象的多个方法时让代码变得精简,下面描述一个具体的例子:

var name1:String  = "wanglongjiang"
普通操作
name1.replace('g', 'p')
name1.replace('a','b')
println(name1)
使用with表达式
val withtest = with(name1){
            replace('g', 'p')
            replace('a','b')
            “println(this)”
}

 

2.run函数


run函数的用法和使用场景和上面with类似,只是稍微做了一些语法的改动。首先run函数通常不会直接调用,而是要在某个对象的基础上调用;其实run函数只接受一个Lambda参数,并且在Lambda表达式中提供调用对象的上下文。其它方面和with一样,包括也会使用Lambda表达式中的最后一行代码作为返回值返回。示例如下:

val result = obj.run {
            //这里是obj的上下文
            "value" //run函数的返回值
        }
val runtest = name1.run {
            replace('g', 'p')
            replace('a','b')
            "runtest"
        }
        println(runtest)


3.apply函数


apply函数和run函数也是及其类似,都是要在某个对象上调用,并且只接受一个Lambda参数,也会在Lambda表达式中提供对象的上下文,但是apply函数无法定义返回值,而是会自动返回调用对象本身,示例代码如下:

 

val result = obj.apply {
            //这里是obj的上下文
        }
        //result == obj
val applytest = name1.apply {
            replace('g', 'p')
            replace('a','b')
            "runtest"  无效
        }
        println(applytest) 返回对象本身


4.let 函数


1.let函数返回类型,是根据匿名函数最后一行的变化而变化

2.let函数的匿名函数里持有的是it == 集合本身

val lettest = name1.let {
            it.replace('g', 'p')
            it.replace('a','b')
            "runtest"
        }
        println(lettest)
目录
相关文章
|
3天前
|
IDE 开发工具 Kotlin
Kotlin教程笔记(6)- 函数与Lambda表达式
Kotlin教程笔记(6)- 函数与Lambda表达式
|
1天前
|
IDE 开发工具 Kotlin
Kotlin - 函数与Lambda表达式
Kotlin - 函数与Lambda表达式
|
2月前
|
Java 调度 Android开发
Android经典实战之Kotlin的delay函数和Java中的Thread.sleep有什么不同?
本文介绍了 Kotlin 中的 `delay` 函数与 Java 中 `Thread.sleep` 方法的区别。两者均可暂停代码执行,但 `delay` 适用于协程,非阻塞且高效;`Thread.sleep` 则阻塞当前线程。理解这些差异有助于提高程序效率与可读性。
55 1
|
2月前
|
Java Android开发 开发者
Kotlin 循环与函数详解:高效编程指南
高效编程实践 • 避免不必要的循环 - 尽量使用集合操作如 map、filter 来减少显式的循环。 • 使用尾递归优化 - 对于需要大量递归的情况,考虑使用尾递归以优化性能。 • 内联函数 - 对于传递 Lambda 表达式的函数,使用 inline 关键字可以减少运行时开销。 通过上述指南,您应该能够更好地理解 Kotlin 中的循环和函数,并能够编写更加高效和简洁的代码。Kotlin 的设计哲学鼓励开发者编写易于理解和维护的代码,而掌握循环和函数是实现这一目标的关键步骤。 如果您想了解更多关于 Kotlin 的循环和函数的信息,以下是一些官方文档和资源,它们可以提供额外的参考
38 1
|
2月前
|
Java Kotlin
Kotlin 循环与函数详解:高效编程指南
Kotlin中的循环结构让你能轻松遍历数组或范围内的元素。使用`for`循环结合`in`操作符,可以简洁地访问数组中的每个项,如字符串数组或整数数组。对于范围,可以用`..`来定义一系列连续的值并进行迭代。此外,Kotlin支持通过`break`和`continue`控制循环流程。函数则允许封装可复用的代码块,你可以定义接受参数并返回值的函数,利用简写语法使代码更加紧凑。例如,`myFunction(x: Int, y: Int) = x + y`简洁地定义了一个计算两数之和的函数。
42 1
|
3月前
|
安全 Android开发 Kotlin
Android经典面试题之Kotlin中常见作用域函数
**Kotlin作用域函数概览**: `let`, `run`, `with`, `apply`, `also`. `let`安全调用并返回结果; `run`在上下文中执行代码并返回结果; `with`执行代码块,返回结果; `apply`配置对象后返回自身; `also`附加操作后返回自身
44 8
|
3月前
|
Swift iOS开发 Kotlin
苹果iOS新手开发之Swift中实现类似Kotlin的作用域函数
Swift可通过扩展实现类似Kotlin作用域函数效果。如自定义`let`, `run`, `with`, `apply`, `also`,增强代码可读性和简洁性。虽无直接内置支持,但利用Swift特性可达成相似功能。
52 7
|
Kotlin
【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )(二)
【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )(二)
121 0
|
Kotlin
【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )(一)
【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )(一)
274 0
|
1月前
|
Android开发 开发者 Kotlin
告别AsyncTask:一招教你用Kotlin协程重构Android应用,流畅度飙升的秘密武器
【9月更文挑战第13天】随着Android应用复杂度的增加,有效管理异步任务成为关键。Kotlin协程提供了一种优雅的并发操作处理方式,使异步编程更简单直观。本文通过具体示例介绍如何使用Kotlin协程优化Android应用性能,包括网络数据加载和UI更新。首先需在`build.gradle`中添加coroutines依赖。接着,通过定义挂起函数执行网络请求,并在`ViewModel`中使用`viewModelScope`启动协程,结合`Dispatchers.Main`更新UI,避免内存泄漏。使用协程不仅简化代码,还提升了程序健壮性。
53 1