LoginSignup
2
0

More than 3 years have passed since last update.

スコープ関数どれを使う?

Posted at

はじめに

kotlinにはスコープ関数といった関数があり、代表的なものとして、let、run、apply、alsoの4つがあります。
それぞれの違い、どれを使用するのか解説したいと思います。

レシーバーの違い

スコープ関数では、レシーバーをitthisで表すことができます。
使用できるレシーバーは決まっており、
itletalso
thisrunapply
となります。

レシーバーについて、実際のコードで説明すると、

val hogehoge = hoge.let { it -> 処理 }

上記のコードのhogeの部分をitthisで表現しています。
itthisでは、
・itは名前を変更できる。
・thisは省略して書くことができます。

戻り値の違い

スコープ関数では、戻り値にも違いがあります。
戻り値を指定できるのはletrun
対象オブジェク(hogeの部分をさします)になるのはapplyalso

どれを使用したらいいのか

それぞれの違いは解説しましたが、実際にどれを使用すればいいのでしょうか?
ここからは、私の解釈となりますので、絶対正しいとは限りませんのでご了承ください。

レシーバーであるitthisですが、thisには問題があります。
例で説明すると、

fun main() {
    var text = "HOGE"
    val button = Button(context).apply {
        //thisを省略
        text = "hogehoge"
    }
    //出力はHOGE
    println(button.text)
}

上記の場合、Buttonのtextを変更したかったのに、違うtextが変更してしまっているパターンです。
thisで省略して書いてしまうと予想外の処理になってしまう可能性があります。

名前を変更できるitなら、名前をパッと見て何を示しているのかわかるので、
レシーバーがitである、letalsoをオススメします!

おわりに

今回、スコープ関数の代表的な4つについて解説いたしました。
実際にどれを使用するかは本人次第ですが、他の方と一緒にコーディングする際は、
あらかじめ決めておいた方がいいのかもしれません!
最後まで読んでいただきありがとうございました!!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0