apply (Kotlin)
読み:あぷらい
外語:apply
Kotlinに5種類あるスコープ関数のうちの一つ。
概要
元をthisで参照し、戻り値は呼び出し元のインスタンスとなるスコープ関数である。
なおapplyは一般的な英単語で使用頻度も高いことから、例えばSharedPreferences.Editorなどにapply()メソッドなどが存在しているが、それらとは異なる。
定義
public inline fun<T> T.apply(f: T.() -> Unit): T { f(); return this }
特徴
動作
(特にレシーバーの)オブジェクトを設定するような場合に使われることが多い。
元のオブジェクトはthisで参照できる。thisは省略できるので、スコープ内では単純に変数に代入する式を書き連ねるだけで済む利便性がある。ただしスコープの内外でthisの意味が変わってしまうことに注意が必要である。
元のオブジェクトがnullableの場合、obj?.apply {} という構文を取ると、objがnullの場合は {} 内は実行されないが、nullではない場合は {} 内が実行される。この時、thisにはnon-nullの変数が設定される。
戻り値
applyの戻り値は呼び出し元のインスタンスである。
従って、applyで引数を受け取って何か仕事をするが、その結果は返さず、返すのはレシーバー、ということである。
つまり次の例は、期待通りには動作しない。
val str = "hoge".apply { toUpperCase() }
strの結果は小文字のままである。applyと同様に動作し任意の型を返すスコープ関数にwithがある。言い換えれば、withのレシーバーを返すタイプがapplyである。
再検索