Kotlinでよく使うスコープ関数
/ 4 min read
Updated:Table of Contents
はじめに
Kotlinにはスコープ関数という便利な関数があります。let, apply, also, runなどです。
個人的によく使うletとapplyを厚めに、どういう時に使っているかコード例と一緒に紹介します。
let
nullチェックのときによく使っていて、個人的には使用頻度がダントツでNO1です。
Swiftのguard let の感覚でよく使います。
val hogeString: String? = nullhogeString?.let { // nullじゃなかったら println(it)}apply
letと比べると使用頻度が落ちますが、applyも少しだけ使います。
インスタンスを生成後に、フィールドに代入するときに使います。
// とあるFragmentがあり…fun newInstance( hogeId: String,) = HogeFragment().apply{ arguments = Bundle().apply { putString("HOGE_ID", refId) } }他にはJobがキャンセルor完了したときになにか処理をしたいときにも使えます。
private var hogeJob: Job? = null
hogeJob = lifecycleScope.launch { // なにか処理をする}.apply { invokeOnCompletion { cause -> if (cause == null) { println("正常終了") } else { println("異常終了: $cause") } }}run
runも少し使うことがあります。
letでnullチェックをして、nullのときになにか処理をする場合に使います。
val hogeString: String? = nullhogeString?.let { // nullじゃなかったら println(it)} ?: run { println("nullだよ")}ただこれだと別にif elseのnullチェックでもいいよな…と思い使わないことが多いです。
使うときはすでにlet runが使われているときに流用することが多い気がします。
with
withもほぼ書いたことないです。
なんとなくですがConvention Pluginを作るときはwithを使っているプロジェクトが多い気がするので流れで使ってます。
class KoverPlugin: Plugin<Project> { override fun apply(target: Project) { val koverPlugin = "org.jetbrains.kotlinx.kover" with(target) { // 以下処理が続くalso
alsoもありますが、ほとんど使ったことがないです。applyでいいやと思って使いません。
終わりに
Kotlinのスコープ関数について紹介しました。
感覚で書いていたので、こうやって言語化してみるとwithとかalsoはあまり使ってないなと気付きになりました。
他にもうまい使い方を見つけたらまた記事を書きたいと思います。