結論が先
違い | 戻り値 | 内部操作 |
---|---|---|
させて | 最後の行 | それ |
申し込み | 呼び出し元自体 | これ |
また | 呼び出し元自体 | それ |
走る | 最後の行 | これまたは省略 |
- 最初に、データ表示を容易にするデモ用の Person クラスを作成します。
- 次に、API ごとに 1 ~ 2 個のテスト メソッドを記述し、
出力されたログ (メモにあるもの) を確認します。
class Person(var name: String, var age: Int) {
override fun toString(): String {
return "[姓名:$name ~ 年龄:$age]"
}
}
させて
- サウンディングが必要な一部のデータの拡張処理に適しています。
- 戻り値は最後の行です
- 代わりに内部的に使用します
//原始数据[姓名:张三 ~ 年龄:20]
//修改后数据[姓名:张三 ~ 年龄:30]
//二次let数据kotlin.Unit
fun test1(): Unit {
val person = Person("张三", 20)
val result = person.let {
println("原始数据${it.toString()}")
it.age = 30
println("修改后数据${it.toString()}")
it.age = 40
}.let {
println("二次let数据${it.toString()}")
}
return result
}
//原始数据[姓名:张三 ~ 年龄:20]
//修改后数据[姓名:张三 ~ 年龄:30]
//二次let数据[姓名:张三 ~ 年龄:40]
fun test01(): Person {
val person = Person("张三", 20)
val result = person.let {
println("原始数据${it.toString()}")
it.age = 30
println("修改后数据${it.toString()}")
it.age = 40
it
}.let {
println("二次let数据${it.toString()}")
it
}
return result
}
申し込み
- 戻り値は呼び出し元そのもの
- 代わりにこれを内部的に使用します
//原始数据[姓名:张三 ~ 年龄:20]
//修改后数据[姓名:张三 ~ 年龄:30]
//二次apply数据[姓名:张三 ~ 年龄:40]
fun test2(): Person {
val person = Person("张三", 20)
val result = person.apply {
println("原始数据${this.toString()}")
this.age = 30
println("修改后数据${this.toString()}")
this.age = 40
}.apply {
println("二次apply数据${this.toString()}")
}
return result
}
また
- 戻り値は呼び出し元そのもの
- 代わりに内部的に使用します
//原始数据[姓名:张三 ~ 年龄:20]
//修改后数据[姓名:张三 ~ 年龄:30]
//二次also数据[姓名:张三 ~ 年龄:40]
fun test3(): Person {
val person = Person("张三", 20)
val result = person.also {
println("原始数据${it.toString()}")
it.age = 30
println("修改后数据${it.toString()}")
it.age = 40
}.also {
println("二次also数据${it.toString()}")
}
return result
}
走る
- 戻り値は最終行
- 代わりにこれを内部的に使用します
- 変数名なしで呼び出し元に直接割り当てることができます
//原始数据[姓名:张三 ~ 年龄:20]
//修改后数据[姓名:张三 ~ 年龄:30]
//二次also数据kotlin.Unit
fun test4(): Unit {
val person = Person("张三", 20)
val result = person.run {
println("原始数据${toString()}")
age = 30
println("修改后数据${toString()}")
age = 40
}.run {
println("二次also数据${toString()}")
}
return result
}
//原始数据[姓名:张三 ~ 年龄:20]
//修改后数据[姓名:张三 ~ 年龄:30]
//二次also数据[姓名:张三 ~ 年龄:40]
fun test04(): Person {
val person = Person("张三", 20)
val result = person.run {
println("原始数据${toString()}")
age = 30
println("修改后数据${toString()}")
age = 40
this
}.run {
println("二次also数据${toString()}")
this
}
return result
}
takeIf
takeIf 判定条件が満たされた場合に実行されます
//年龄大于19岁:[姓名:张三 ~ 年龄:20]
//takeIf最后一行返回:[姓名:张三 ~ 年龄:40]
fun test5() {
val person = Person("张三", 20)
person.takeIf { it.age > 19 }.let {
println("年龄大于19岁:${it.toString()}")
it!!.age = 40
it
}.let {
println("takeIf最后一行返回:${it.toString()}")
}
取る限り
takeUnless 判定条件が真でない場合に実行
//年龄 不是 大于21岁:[姓名:张三 ~ 年龄:20]
//takeUnless最后一行返回:[姓名:张三 ~ 年龄:40]
fun test05() {
val person = Person("张三", 20)
person.takeUnless { it.age > 21 }.let {
println("年龄 不是 大于21岁:${it.toString()}")
it!!.age = 40
it
}.let {
println("takeUnless最后一行返回:${it.toString()}")
}
}