package com.example.firstkotlin.koltin
import java.io.File
class apply {
}
fun main(){
runFun()
alsoFun()
}
- apply函数可以看做是一个配置函数,可以传入一个接收者,然后调用一系列函数来配置它以便使用。
- 如果提供lambda给apply函数执行,他会返回配置好的接收者
fun applyFunc(){
val file1 = File("E:..../name.txt")
file1.setReadable(true)
file1.setWritable(true)
file1.setExecutable(true)
val file2 = File("E:..../name.txt").apply {
setReadable(true)
setWritable(true)
setExecutable(true)
}
}
- 1、let函数能使某个变量以it关键字引用的方式传递到lambda表达式中。
- 匿名函数执行完成之后,let函数会返回匿名函数中最后一行。
- 2、更多的是和可控类型搭配使用
fun letFun(){
val list = listOf(3,2,1).first().let {
it * it
}
}
- run函数
- 1、和apply函数类似,唯一的不同是run不返回接收者对象,返回的是匿名函数的执行结果,即最后一行的结果
fun runFun(){
val list = listOf(3,2,1)
val result = list.run {
contains(3)
}
val result1 = list.run {
contains(5)
}
println(result)
println(result1)
val number = 100
fun isGood(score:Int) = 100 > 60
fun saySomeThing(isGood:Boolean):String{
if(isGood){
return "太棒了"
}else{
return "继续努力"
}
}
fun printIt(content:String){
println(content)
}
number
.run(::isGood)
.run(::saySomeThing)
.run(::printIt)
}
- with函数
- with函数是run函数的变体,他们的功能行为是一样的,唯一的不同之处在于使用with时,需要值参作为其第一个参数传入。
fun withFun(){
val list = listOf(3,2,1)
with(list,{
contains(3)
})
}
- also函数
- also函数和let函数功能类似,唯一的不同点是:
- also函数返回的是调用者的对象,let函数返回的是匿名函数的执行结果
fun alsoFun(){
var number = 100
number.also {
number = number + 100
}.also {
number = number - 200
}
print(number)
}
- takeif
- takeif需要判断lambda中提供的条件表达式,给出true或者false,如果判断结果是true,
- 从takeif函数返回接收者对象,如果是false,返回null。
- 应用场景:
- 如果需要判断某个条件是否满足,才决定是否赋值或者执行某项任务。
fun takeifFun(){
File("E:..../name.txt").takeIf {
it.exists() && it.canRead()
}?.readText()
}
- takeUnless
- 与takeif刚好相反,只有判定条件为false时,才会返回接收者对象
fun takeUnlessFun(){
File("E:..../name.txt").takeIf {
it.exists() && it.canRead()
}?.takeUnless {
it.isHidden
}?.readText()
}