Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。
https://play.kotlinlang.org/byExample/01_introduction/02_Functions
其他关于kt的博客文章如下:
- Kotlin学习——hello kotlin & 函数function & 变量 & 类 + 泛型 + 继承
- Kotlin学习——流程控制,when,循环,range工具 & kt里的equals & if实现类似三元表达式的效果
- Kotlin学习——kt中的类,数据类 & 枚举类 & 密封类,以及对象
- Kotlin学习——kt里面的函数,高阶函数 & 函数式编程 & 扩展函数和属性
- Kotlin学习——kt里的集合List,Set,Map & List集合的各种方法之Int篇
- Kotlin学习——kt里的集合,Map的各种方法之String篇
目录
- 引出
- let
- run
- with
- apply 类似set方法
- also 打印日志
- 总结
引出
1.Kotlin标准库函数let可用于作用域和null检查;
2.执行一个代码块并返回其结果。不同的是,在run函数中,对象是通过 this 访问的;
3.with是一个非扩展函数,可以简洁地访问其参数的成员:在引用其成员时可以省略实例名称;
4.apply在对象上执行一个代码块,并返回对象本身;
5.also工作原理与apply类似:它执行给定的块并返回调用的对象。在块内部,对象被它引用,日志打印;
let
Kotlin标准库函数let可用于作用域和null检查。当对对象调用时,let执行给定的代码块并返回其最后一个表达式的结果。可以通过参照对象(默认情况下)或自定义名称在块内部访问对象。
package com.tianju.kt.scopeFunc
fun customPrint(s: String) {
print(s.uppercase())
}
fun main() {
val empty = "test".let {
customPrint(it)
it.isEmpty()
}
// TEST is empty false
println(" is empty $empty")
// Printing "null":
// Printing "my string":
// MY STRING
fun printNonNull(str: String?) {
println("Printing \"$str\":")
str?.let {
print("\t")
customPrint(it)
println()
}
}
// FIRST : SECOND
fun printIfBothNonNull(strOne: String?, strTwo: String?) {
strOne?.let { firstString ->
strTwo?.let { secondString ->
customPrint("$firstString : $secondString")
println()
}
}
}
printNonNull(null)
printNonNull("my string")
printIfBothNonNull("First","Second")
}
run
与let一样,run是标准库中的另一个作用域函数。基本上,它也是这样做的:执行一个代码块并返回其结果。不同的是,在run函数中,对象是通过 this 访问的。当您想调用对象的方法而不是将其作为参数传递时,这很有用。
package com.tianju.kt.scopeFunc
fun main() {
fun getNullableLength(ns: String?) {
println("for \"$ns\":")
ns?.run {
// 访问对象的成员时不使用其名称
println("\tis empty? " + isEmpty())
println("\tlength = $length")
this.length
}
}
getNullableLength(null)
getNullableLength("")
getNullableLength("some string with Kotlin")
}
with
with是一个非扩展函数,可以简洁地访问其参数的成员:在引用其成员时可以省略实例名称。
package com.tianju.kt.scopeFunc
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}")
}
apply 类似set方法
apply在对象上执行一个代码块,并返回对象本身。在块内部,对象被此引用。此函数用于初始化对象非常方便。
类似java里面new 对象后,进行set值
package com.tianju.kt.scopeFunc
/**
* 数据类
*/
data class Person(var name: String, var age: Int, var about: String) {
// 构造方法有默认值
constructor() : this("", 0, "")
}
fun main() {
val jake = Person()
println(jake)
val stringDescription = jake.apply {
name = "Jake"
age = 30
about = "Android developer"
}.toString()
println(stringDescription)
}
also 打印日志
also工作原理与apply类似:它执行给定的块并返回调用的对象。在块内部,对象被它引用,因此更容易将其作为参数传递。此函数便于嵌入其他操作,可以用于打印日志
package com.tianju.kt.scopeFunc
data class PersonP(var name: String, var age: Int, var about: String) {
constructor() : this("", 0, "")
}
fun writeCreationLog(p: PersonP) {
println("A new person ${p.name} was created.")
}
fun main() {
val jake = PersonP("Jake", 30, "Android developer")
.also {
writeCreationLog(it)
}
println(jake)
}
总结
1.Kotlin标准库函数let可用于作用域和null检查;
2.执行一个代码块并返回其结果。不同的是,在run函数中,对象是通过 this 访问的;
3.with是一个非扩展函数,可以简洁地访问其参数的成员:在引用其成员时可以省略实例名称;
4.apply在对象上执行一个代码块,并返回对象本身;
5.also工作原理与apply类似:它执行给定的块并返回调用的对象。在块内部,对象被它引用,日志打印;