kotlinのlet run also applyの使い方についてのサンプルをずらずらと書いてみた。
//あらかじめ変数宣言
var test1: Int? = null
var test2: Int? = 10
//let nullじゃないときに実行するとかが可能
var test3: String = ""
test2?.let {test3 = "Not Null 1"}
//let leyは最後に実行された関数の値を返すことが可能
var test4 = test2?.let {"Not Null 2"}
//let nullじゃないときに自身に代入できる
test2?.let { test2 = 3 }
//let 自分自身はitでアクセスできるがvalなので変更不可 thisは使えない
var test5 = test2?.let { (it + 3).toString() }
//let 結果を返さないときは何も返さない(Unitを返す)
var test6 = test2?.let { test2 = 3 }
//let nullの時にはnullを返す
var test7: Int? = test1?.let { 9 }
//let nullの時に返値を返すことができる
var test8: Int = test1?.let { 9 } ?: 10
//let 変数がnullの時にrunを実行するとかができる
var test9: Int = 0;
test1?.let { test9 = 1 } ?: run { test9 = 2 }
//also の場合はほとんどletと同じ。ただし、letが最後に実行した関数の返値が返るのではなく、そのオブジェクトそのものが帰る
//run 自分自身に対する操作が可能
var test10: Int = 0;
test10.run{test10 = 2}
//run 返値はない
var test11 = test10.run{test10 = 2}
//run 返値を持つ、自分自身をthisで表現できる
var test12 = test10.run{this + 2}
//run まとめて操作するのに向いている 返値も得られる
class testClass {
var num: Int = 0
fun add(): Int = num++
}
var test13:Int = testClass().run {
add()
add()
add()
}
//aplly 自分自身に対する操作が可能
test10.apply {test10 = 99}
//apply letとalsoの関係のように、runは最後に実行された関数の返値が返るが、alsoは必ず自分自身のオブジェクトが返る
var test14: testClass = testClass().apply {
add()
add()
add()
}
//withもあるけど、ほぼ上記の使い方で問題ないので必要なさそう
//もっというと、letとalsoだけでも問題ないのでは?