前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android面试题之Kotlin的apply、let、also、run函数

Android面试题之Kotlin的apply、let、also、run函数

作者头像
AntDream
发布2024-06-13 20:53:36
560
发布2024-06-13 20:53:36
举报

apply

apply函数可以看作是一个配置函数,可以传入一个接收者,然后调用一系列函数来配置以便使用,如果提供lambda给apply函数执行,将返回配置好的接收者

apply能让每个配置函数都作用于接收者

代码语言:javascript
复制
val file1 = File("C://Android").apply {
    setExecutable(false)
    setReadable(true)
    setWritable(true)
}

let

能使某个变量作用于其Lambda表达式里,让it关键字能引用它。

代码语言:javascript
复制
fun main() {
    val result = listOf(3,2,1).first().let {
        it*it
    }
    println(result)
}

fun formatName(name:String?): String {
    return name?.let { "Whelcome, $it" } ?: "name?"
}

run

  • 和apply差不多,但返回的是lambda的执行结果,而apply返回的是接收者
  • 可以执行函数引用
  • 多个函数引用可以链式调用
代码语言:javascript
复制
fun main() {
    var file = File("D:test.txt")
    val result = file.run {
        readText().contains("hava")
    }
    println(result)
    //执行函数引用
    "hhhhh"
        .run(::isLong)
        .run(::showTip)
        .run(::println)
}

fun isLong(name:String) = name.length >= 3

fun showTip(isLong:Boolean) :String {
    return if (isLong){
        "too long"
    }else{
        "OK"
    }
}

with

是run函数的变体,功能行为一样,with的调用方式不同,with需要值参作为其第一个参数传入

代码语言:javascript
复制
fun main() {
    val result = "hkjkj".run { length >=3 }
    println(result)
    val result1 = with("hkjkj"){
        length>=3
    }
    println(result1)
}

also

和let相似,需要把接收者值参传给lambda,但also返回接收者对象。also尤其适合针对同一原始对象,可以基于原始接收者对象执行额外的链式调用

代码语言:javascript
复制
fun main() {
    var fileContent:List<String>
    var reuslt = File("D://Android")
        .also { println(it.name) }
        .also { fileContent = it.readLines() }
    println(fileContent)
}

takeif

takeif函数需要判断lambda中提供的条件表达式的结果,如果是true,takeif函数返回接收者对象,如果是false,返回Null。

如果需要判断某个条件是否满足,再决定是否可以赋值变量或执行某项任务,takeif就非常有用

代码语言:javascript
复制
fun main() {
    val result = File("D://Android")
        .takeIf { it.exists() && it.canRead() }
        ?.readText()
    println(result)
}

takeUnless

与takeif的返回结果情况相反,返回为false才会返回

let、apply和run

函数

入参

功能

返回值

let

当前调用者,可以用it代替

可以对参数it进行操作

返回lambda的结果

apply

调用当前对象的一系列函数

返回接收者

run

调用接收者的一系列函数,还可以执行函数引用,也就是调用其他函数

返回lambda的结果

let会把接收者传给lambda,而apply什么都不传;匿名函数执行完,apply会返回当前的接收者,而let会返回lambda的最后一行

码字不易,求转发,求点在看,求关注,感谢!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AntDream 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • apply
  • let
  • run
  • with
  • also
  • takeif
  • takeUnless
    • let、apply和run
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档