はじめに
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つについて解説いたしました。
実際にどれを使用するかは本人次第ですが、他の方と一緒にコーディングする際は、
あらかじめ決めておいた方がいいのかもしれません!
最後まで読んでいただきありがとうございました!!