はじめに
kotlinにはスコープ関数といった関数があり、代表的なものとして、let、run、apply、alsoの4つがあります。
それぞれの違い、どれを使用するのか解説したいと思います。
レシーバーの違い
スコープ関数では、レシーバーをitかthisで表すことができます。
使用できるレシーバーは決まっており、
itはlet、also
thisはrun、apply
となります。
レシーバーについて、実際のコードで説明すると、
val hogehoge = hoge.let { it -> 処理 }
上記のコードのhogeの部分をitやthisで表現しています。
itとthisでは、
・itは名前を変更できる。
・thisは省略して書くことができます。
戻り値の違い
スコープ関数では、戻り値にも違いがあります。
戻り値を指定できるのはletとrun
対象オブジェク(hogeの部分をさします)になるのはapplyとalso
どれを使用したらいいのか
それぞれの違いは解説しましたが、実際にどれを使用すればいいのでしょうか?
ここからは、私の解釈となりますので、絶対正しいとは限りませんのでご了承ください。
レシーバーであるitとthisですが、thisには問題があります。
例で説明すると、
fun main() {
var text = "HOGE"
val button = Button(context).apply {
//thisを省略
text = "hogehoge"
}
//出力はHOGE
println(button.text)
}
上記の場合、Buttonのtextを変更したかったのに、違うtextが変更してしまっているパターンです。
thisで省略して書いてしまうと予想外の処理になってしまう可能性があります。
名前を変更できるitなら、名前をパッと見て何を示しているのかわかるので、
レシーバーがitである、letとalsoをオススメします!
おわりに
今回、スコープ関数の代表的な4つについて解説いたしました。
実際にどれを使用するかは本人次第ですが、他の方と一緒にコーディングする際は、
あらかじめ決めておいた方がいいのかもしれません!
最後まで読んでいただきありがとうございました!!