Kotlin基础知识六: 标准函数(Standard Functions)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin基础知识六: 标准函数(Standard Functions)相关的知识,希望对你有一定的参考价值。
参考技术A apply函数可以理解为是一种配置函数。它允许你在receiver上调用一系列的函数、而不需要在每个函数前都加上变量名。当lambda执行完成后,apply()函数返回调用者的实例。举例:
let扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择;let函数另一个作用就是可以避免写一些判断null的操作。
举例:
避免判空的写法:
apply接收的函数类型为() -> Unit,即无参、无返回值,匿名函数执行结束后,会返回当前的receiver;然而let接收的函数类型为(T) → R,其中T为调用者类型,R为匿名函数中返回的特定类型,或lambda表达式最后一行返回的类型。
run函数与apply类似,不同点是run的返回值是lambda的结果,然而apply的返回值是调用者,即receiver。
run还可以用来在receiver上执行一个function reference。
使用run函数实现链式调用(chained calls)比嵌套的函数调用更容易阅读和跟踪。
例如,判断名字是否大于10个字符、并根据结果生成格式化消息、然后打印出来。
如果使用嵌套调用时:
如果使用run函数链式调用:
run函数也可以脱离receiver而使用:
目的:用于对同一个对象执行多次操作而不需要反复把对象的名称写出来。
perform multiple operations on the same object without repeating its name.
考虑以下例子:在result实例上调用不同的方法时,每次都需要重复result这个名字。
with函数有两个参数,第一个参数为任意类型的对象实例,第二个参数是一个lambda表达式。with函数会把第一个参数转换为lambda表达式的接受者。可以通过显式的this指针调用接受者的方法。
使用with函数重写:
进一步简化的写法:
also与let非常相似,都会把receiver作为参数传递给lambda,不同点是also会返回receiver,而let返回的是lambda的结果。
因为also函数会返回receiver本身,所以可以在同一receiver上执行also的链式调用。
举例:
takeIf会执行一个断言(predicate)函数,如果断言函数返回true,takeIf返回receiver本身;如果返回false,则takeIf返回null。
如果不使用takeIf的写法:
可见,takeIf不需要临时变量file,也不需要专门处理返回null的情景。
如果断言函数返回false时,返回this值;否则,返回null。
举例,当一个文件不是隐藏文件时,读取出文件内容:
以上是关于Kotlin基础知识六: 标准函数(Standard Functions)的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin标准库函数总结 ( apply 函数 | let 函数 | run 函数 | with 函数 | also 函数 | takeIf 函数 | takeUnless 函数 )
Kotlin扩展函数总结 ★ ( 超类扩展函数 | 私有扩展函数 | 泛型扩展函数 | 扩展属性 | 定义扩展文件 | infix 关键字用法 | 重命名扩展函数 | 标准库扩展函数 )
Kotlin扩展函数总结 ★ ( 超类扩展函数 | 私有扩展函数 | 泛型扩展函数 | 扩展属性 | 定义扩展文件 | infix 关键字用法 | 重命名扩展函数 | 标准库扩展函数 )