Kotlin学习第三课
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。