apply と also は似ています。
👉 Kotlin スコープ関数 の上手な使い分け その1 - apply
■ also の便利な使い方 (公式)
public inline fun <T> T.also(block: (T) -> Unit): T {
contract {...}
block(this)
return this
}
also works like apply: it executes a given block and returns the object called. Inside the block, the object is referenced by it, so it's easier to pass it as an argument. This function is handy for embedding additional actions, such as logging in call chains.
also も apply と同じように動作します。与えられたブロックを実行し、呼び出されたオブジェクトを返します。ブロックの内部では、オブジェクトは it によって参照されるので、引数として渡すのは簡単です。この関数は、コールチェーンにロギングなどの追加アクションを埋め込むのに便利です。
val jake = Person("Jake", 30, "Android developer")
.also {
writeCreationLog(it)
}
Additional effects
追加効果
👉 Kotlin Examples: Learn Kotlin Programming By Example
👉 Scope functions | Kotlin
👉 Idioms | Kotlin
■ まとめ
「also」は「オブジェクトに対しての追加処理」に使う と良さそうです。
あと、Singleton インスタンスの生成時のコードで見かけることが印象に強いです。
@JvmStatic
fun getInstance(context: Context): PowerSpinnerPersistence =
instance ?: synchronized(this) {
instance ?: PowerSpinnerPersistence().also {
instance = it
sharedPreferenceManager =
context.getSharedPreferences("com.skydoves.powerspinenr", Context.MODE_PRIVATE)
}
}
companion object {
@Volatile
private var INSTANCE: MySingleton? = null
fun getInstance(context: Context) =
INSTANCE ?: synchronized(this) {
INSTANCE ?: MySingleton(context).also {
INSTANCE = it
}
}
}
👉 Kotlin で書きたい「正しいシングルトン(Singleton)」
こんな使い方も公式に書いてました。
Swap two variables
2つの変数を入れ替える
var a = 1
var b = 2
a = b.also { b = a }
👉 Kotlin スコープ関数 の上手な使い分け その1 - apply
👉 Kotlin スコープ関数 の上手な使い分け その2 - also
👉 Kotlin スコープ関数 の上手な使い分け その3 - with
👉 Kotlin スコープ関数 の上手な使い分け その4 - let
👉 Kotlin スコープ関数 の上手な使い分け その5 - run