一、几个作用域函数

作用域函数对象引用返回值是否扩展函数
let itLambda resultYes
run thisLambda resultYes
run -Lambda resultNo:called without the context object
with thisLambda resultNo:takes the context object as an argument.
apply thisContext objectYes
also itContext objectYes

这些作用域函数让 Kotlin 编程变得更简单,当然,副作用就是可能不太好理解。作用域函数本质上是类似的:在对象上执行代码块。每个作用域函数之间有两个主要区别:

各个函数的作用简洁描述如下:

  • 在访问接收方对象的成员 this 时可以省略,从而使代码更短
  • 除了上面写的几个函数,Kotlin 标准库中还有其它作用域函数

let

let 将 调用对象 作为参数,并返回 lambda 表达式的结果。Kotlin let 是一个范围函数,表达式内部声明的变量不能在外部使用。it 是 let 中的一个默认的属性。如下所示,let 中的最后一个值将作为参数返回。

KOTLIN
 1fun main(args: Array<String>) {
 2    val str = "Kotlin is so simple!"
 3    val length = str.let {
 4        println("$it!!")
 5        it.length
 6    }
 7    println("${str.length}: $length")
 8
 9    val a = 10
10    val b = 20
11    val result = a.let { a + b }.let { it + 1 }
12    println("result is $result")
13}
14
15// Kotlin is so simple!!!
16// 20
17// result is 31
点击展开查看更多

also

also:顾名思义,also 表达式会对被调用的对象进行一些额外的处理。与 let 不同的是,它返回的是 原始对象。与 let 一样,代码块中也使用 it。

KOTLIN
 1fun main(args: Array<String>) {
 2    val a = 10
 3    val b = 20
 4    val result = a.also {
 5        it + b + 5
 6    }
 7    println("result is $result")
 8}
 9
10// result is 10
点击展开查看更多

run

apply

apply 是类型的扩展函数。它在表达式中的对象引用(也称为接收器)上运行,并在完成时返回对象引用。

with

与 apply 一样,with 用于更改实例属性,而无需每次都在引用上调用 . 运算符。

use 自动关闭资源

除了以上几种作用域,Kotlin 常用的还有一个 use 作用域块(当然还可以自定义更多)。该作用域函数和 Java 中的 try-resource 有者同样的作用。

版权声明

作者: 浮生一梦

链接: /posts/1/01/kotlin%E4%BD%9C%E7%94%A8%E5%9F%9F%E5%87%BD%E6%95%B0/

许可证: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

评论

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键