[Kotlin] Scope Function
緒論
このリリースでは、
let
、also
、with
、run
、apply
、scope function
などのusage convention
のScope Function
について説明します.本題
Context Object
Context Object
を正式に理解する前に、this
(lambda
receiver)とit
(lambda
論点)について議論します.まず、
this
はrun
、with
、apply
の関数であり、主にオブジェクトへのアクセスのための属性または方法であり、省略することができる.it
は、let
、also
の関数に使用され、主に関数呼び出しのパラメータとして使用される.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
の機能も含む.主にinitialization
とcomputation
を同時に運転するために使用される.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.結論
また、
takeIf
とtakeUnless
について簡単に紹介します.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
Reference
この問題について([Kotlin] Scope Function), 我々は、より多くの情報をここで見つけました https://velog.io/@kldaji/Kotlin-Scope-Functionテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol