本文主要是介绍Kotlin let run with apply also 关键字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Kotlin let run with apply also 关键字
参考官网学习资料 https://play.kotlinlang.org/byExample/06_scope_functions/
一、 let
Kotlin 标准库函数 let 可用于范围界定和空检查。当在对象上调用时,let 执行给定的代码块并返回其最后一个表达式的结果。该对象可在块内通过引用it
(默认情况下)或自定义名称来访问。
fun customPrint(s: String) {print(s.uppercase())
}fun main() {val empty = "test".let { // 1customPrint(it) // 2it.isEmpty() // 3}println(" is empty: $empty")fun printNonNull(str: String?) {println("Printing \"$str\":")str?.let { // 4print("\t")customPrint(it)println()}}fun printIfBothNonNull(strOne: String?, strTwo: String?) {strOne?.let { firstString -> // 5 strTwo?.let { secondString ->customPrint("$firstString : $secondString")println()}}}printNonNull(null)printNonNull("my string") printIfBothNonNull("First","Second")
}
-
根据字符串“test”的结果调用给定块。
-
通过 it 引用调用“test”上的函数。
-
let 返回该表达式的值。
-
使用安全调用,因此 let 及其代码块将仅在非空值上执行。
-
使用自定义名称代替
it
,以便嵌套let可以访问外部let的上下文对象。在此代码里也就是firstString替代了第一层范围内的it
,secondStirng替代了第二层范围内的it
二、 run
与 let 一样,run 是标准库中的另一个作用域函数。基本上,它执行相同的操作:执行代码块并返回其结果。不同之处在于,在运行内部,对象是通过 this 访问的。当您想要调用对象的方法而不是将其作为参数传递时,这非常有用。
fun main() {fun getNullableLength(ns: String?) {println("for \"$ns\":")ns?.run { // 1println("\tis empty? " + isEmpty()) // 2println("\tlength = $length") length // 3}}getNullableLength(null)getNullableLength("")getNullableLength("some string with Kotlin")
}
简单来说就是run括号里的可以直接不用额外的this或者it来代替当前对象去调用该对象的方法,可以直接调用该对象里的方法
三、with
with 是一个非扩展函数,可以简洁地访问其参数的成员:引用其成员时可以省略实例名称。
class Configuration(var host: String, var port: Int) fun main() {val configuration = Configuration(host = "127.0.0.1", port = 9000) with(configuration) {println("$host:$port")}// instead of:println("${configuration.host}:${configuration.port}")
}
用with修饰的小括号里范围内可以直接不用写对象变量名直接调用成员了,比如不用configuration.host,而可以直接写成host
四、apply
apply 在对象上执行一段代码并返回对象本身。在块内,对象由 this 引用。该函数对于初始化对象很方便。
data class Person(var name: String, var age: Int, var about: String) {constructor() : this("", 0, "")
}fun main() {val jake = Person() // 1val stringDescription = jake.apply { // 2name = "Jake" // 3age = 30about = "Android developer"}.toString() // 4println(stringDescription)
}
五、also
也像 apply 一样工作:它执行给定的块并返回调用的对象。在块内部,对象由它引用,因此更容易将其作为参数传递。此函数可以方便地嵌入附加操作,例如登录调用链。
data class Person(var name: String, var age: Int, var about: String) {constructor() : this("", 0, "")
}fun writeCreationLog(p: Person) {println("A new person ${p.name} was created.")
}fun main() {val jake = Person("Jake", 30, "Android developer") // 1.also { // 2 writeCreationLog(it) // 3}
}
这篇关于Kotlin let run with apply also 关键字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!