skip to content
私的歌詞倉庫

Kotlinでよく使うスコープ関数

/ 4 min read

Updated:
Table of Contents

はじめに

Kotlinにはスコープ関数という便利な関数があります。let, apply, also, runなどです。

個人的によく使うletとapplyを厚めに、どういう時に使っているかコード例と一緒に紹介します。

let

nullチェックのときによく使っていて、個人的には使用頻度がダントツでNO1です。

Swiftのguard let の感覚でよく使います。

val hogeString: String? = null
hogeString?.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? = null
hogeString?.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はあまり使ってないなと気付きになりました。

他にもうまい使い方を見つけたらまた記事を書きたいと思います。

参考文献