■ with の便利な使い方 (公式)
public inline fun <T, R> with(receiver: T, block: T.() -> R): R {
contract {...}
return receiver.block()
}
with is a non-extension function that can access members of its argument concisely: you can omit the instance name when referring to its members.
with は非拡張関数で、引数のメンバに簡潔にアクセスできる。メンバを参照する際にインスタンス名を省略できる。
Grouping function calls on an object
オブジェクトの関数呼び出しをグループ化する。
Call multiple methods on an object instance (with)
オブジェクトのインスタンスに対して複数のメソッドを呼び出す。
👉 Kotlin Examples: Learn Kotlin Programming By Example
👉 Scope functions | Kotlin
👉 Idioms | Kotlin
■ まとめ
「with」は「記述の長い View などの連続操作をまとめる」のに多く使わています。
with(binding) {
progressBar.visibility = View.VISIBLE
cancelButton.visibility = View.VISIBLE
goButton.visibility = View.GONE
seeFileButton.visibility = View.GONE
}
with(viewBinding.recyclerView) {
setHasFixedSize(true)
adapter = ProductSearchAdapter()
layoutManager =
LinearLayoutManager(
this@ProductSearchActivity,
LinearLayoutManager.VERTICAL,
false
)
}
with(holder.binding) {
person = items[position]
executePendingBindings()
}
with の戻り値を使わないことのほうが多く見えますが、戻り値はあります。
val windowDpSize = with(LocalDensity.current) {
windowSize.toDpSize()
}
👉 Kotlin スコープ関数 の上手な使い分け その1 - apply
👉 Kotlin スコープ関数 の上手な使い分け その2 - also
👉 Kotlin スコープ関数 の上手な使い分け その3 - with
👉 Kotlin スコープ関数 の上手な使い分け その4 - let
👉 Kotlin スコープ関数 の上手な使い分け その5 - run