Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
apply
Kotlinのスコープ関数『apply』は、オブジェクトを設定・初期化するときに使います。ブロック内では『this』でオブジェクトを参照でき、戻り値はレシーバー自身です。
構文
// apply の基本形
val result = オブジェクト.apply {
// this = オブジェクト
プロパティ = 値
メソッド()
}
// result はオブジェクト自身
構文一覧
| スコープ関数 | コンテキスト参照 | 戻り値 | 用途 |
|---|---|---|---|
| apply { } | this(省略可) | レシーバー自身 | オブジェクトの設定・初期化に使います。 |
| also { } | it | レシーバー自身 | 副作用(ログ・デバッグ)の挿入に使います。 |
| let { } | it | ラムダの結果 | null チェックや変換チェーンに使います。 |
| run { } | this(省略可) | ラムダの結果 | オブジェクトのセットアップと計算を組み合わせます。 |
サンプルコード
data class Person(var name: String = "", var age: Int = 0, var email: String = "")
fun main() {
// apply でオブジェクトを初期化します(this は省略可)。
val person = Person().apply {
name = "Alice"
age = 30
email = "alice@example.com"
}
println(person)
// Person(name=Alice, age=30, email=alice@example.com)
// StringBuilder の構築にもよく使われます。
val sb = StringBuilder().apply {
append("Hello")
append(", ")
append("Kotlin!")
}
println(sb.toString()) // Hello, Kotlin!
// apply チェーン — 複数の設定をつなげられます。
val list = mutableListOf<String>().apply {
add("Apple")
add("Banana")
add("Cherry")
}
println(list) // [Apple, Banana, Cherry]
// apply は自身を返すため、そのまま別のメソッドを呼べます。
val size = mutableListOf<Int>().apply {
addAll(listOf(1, 2, 3, 4, 5))
}.size
println(size) // 5
}
概要
『apply』はオブジェクトの初期化ブロックとしてよく使われます。ブロック内では『this』でレシーバーを参照するため、プロパティ名だけで直接代入できます。
戻り値がレシーバー自身のため、生成したオブジェクトをそのまま変数に代入したり、メソッドチェーンの一部として使うのに便利です。
副作用の挿入にはalsoを、null チェックにはletを、計算結果を返したいときはrun / withを参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。