[Kotlin] Scope Function


緒論


このリリースでは、letalsowithrunapplyscope functionなどのusage conventionScope Functionについて説明します.

本題


Context Object

Context Objectを正式に理解する前に、this(lambda receiver)とit(lambda論点)について議論します.
まず、thisrunwithapplyの関数であり、主にオブジェクトへのアクセスのための属性または方法であり、省略することができる.itは、letalsoの関数に使用され、主に関数呼び出しのパラメータとして使用される.

also

public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }
also関数は、「あなたがやるべきことをしたら、返します」と言います.動作を表す関数で、「objectとともに以下の操作を行います.」意味解釈を使うと役に立ちます.

let

public inline fun <T, R> T.let(block: (T) -> R): R { ... return block(this) }
let関数は、「あなたのしたことは結果とともに返されます.」動作を表す関数で、関数を連続的に呼び出すためのcall chain.さらに、non-nullの値のみを実行する環境を提供し、開発者はitではなくnameを直接指定することができ、コードの可読性を向上させることができる.

with

public inline fun <T, R> with(receiver: T, block: T.() -> R): R  = receiver.block()
with関数は「戻りを単独で実行する奴です」を示す関数で、戻り値がない場合に使用する場合は「with this object、以下の操作を行ってください.」理解の意味が分かりやすい.戻り値がある場合は、主に受信者のパラメータを記述するために使用されます.

run

public inline fun <R> run(block: () -> R): R  = return block()
public inline fun <T, R> T.run(block: T.() -> R): R = return block()
run関数は、「直接実行して結果を返す」ことを示す動作関数であり、with関数の動作とほぼ同じであるが、letの機能も含む.主にinitializationcomputationを同時に運転するために使用される.run関数は、non-extension functionにも使用され、複数行のコードを実行するために使用される.

apply

public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }
apply関数は、「拡張して、私は戻ります.」動作を表す関数で、主に受信者オブジェクトへのアクセスに使用されるmember."apply the following assignments to the object."意味が分かりやすい.

n/a.結論


また、takeIftakeUnlessについて簡単に紹介します.
public inline fun <T> T.takeIf(predicate: (T) -> Boolean): T?
  = if (predicate(this)) this else null
上記のコードから容易に分かるように、takeIfの場合、lambda式がtrueであれば受信者対象に戻り、falseであればnullに戻る.△takeUnlessは反対の動作です.
このように、コトリンのScope Functionについて理解しました.理解を助けるために、次の例は公式サイトで参考にすることをお勧めします.筆者はこれらの関数でusageを重点的に議論しようとし,実際の使用にはさらなる練習が必要であることを感じた.
今日はコトリンのScope Functionを知り、今日も筆者は成長しました.

Reference


Kotlin Scoping Function