Kotlin学习第三课

时间:2024-10-30 08:36:22

Kotlin常见标准库函数。

1.apply:你可以传入一个接受者,然后调用一系列函数来配置它以便使用。

没有使用apply

val menuFile = File("menu-file.txt")
menuFile.setReadable(true)
menuFile .setWritable(true)

使用apply

​
val menuFile = File("menu-file.txt").apply {
    setReadable(true)
    setWritable(true)
}


​

2.let:let函数能使某个变量作用于lambda表达式里,让it关键字能引用它。

没有使用let

val fitstElement = listOf(1,2,3).first()
val firstItemSquared = fitstElement * fitstElement 

使用let函数

​
val firstItemSquared = listOf(1,2,3).first().let {
    it*it
}

​

3.run:run和apply函数差不多,但与apply不同,run函数不返回接受者。

假设你想看某个文件是否包含某一个字符串:

val menuFile = File("menu-file.txt")
val serverDragonBreath = menuFile.run {
    readText().contains("Dragon's Breath")
}

run返回的是lambda结果,也就是true或者false。

4.with:with函数时run函数的变体,他们的功能都一样,但是调用的方式不一样,调用with时需要值参作为其第一个参数传入。

val nameTooLong = with ("Polarcubis,Supreme master of NyetHack") {
    length >= 20
}

可以看到参数的传入,然后也是返回true或者false。

5.also:also函数和let函数有些像,和let一样,also也是把接受者作为值参数传给lambda。但有一点不同、:also返回接受者对象,而let返回lambda结果。

6.takeIf:takeIf函数需要判断lambda中提供的条件表达式,给出true或者false,如果判断结果为true,从takeIf函数返回接受者对象,如果为false,则返回null。

当文件可读可写时,才读取文件内容。

不适用takeIf

val file = File("myfile.txt")
val fileContents = if(file.canRead() && file.canWrite()) {
    file.readText()
} else {
    null
}

使用takeIf

val fileContents = File("myfile.txt")
.takeIf { it.canRead() && it.canWrite() }
?.readText()

7.takeUnless,takeUnless和takeIf唯一的区别是,只有判断你给定的条件结果是false时,takeUnless才会返回原始接受者对象,建议使用takeIf而不是takeUnless。