私は、インライン関数がパフォーマンスを向上させる可能性があることを知っています&は、生成されたコードが大きくなる原因になりますが、正しく使用されているかどうかはわかりません。Kotlinでインライン関数を使用するのはいつですか?
lock(l) { foo() }
代わりパラメータの関数オブジェクトを作成し、コールを生成する、コンパイラは、次のコードを放出する可能性があります。 (Source)
l.lock()
try {
foo()
}
finally {
l.unlock()
}
私は非インライン関数に対してkotlinによって作成されない関数オブジェクトが存在しないことを見出しました。どうして?
/**non-inline function**/
fun lock(lock: Lock, block:() -> Unit) {
lock.lock();
try {
block();
} finally {
lock.unlock();
}
}
これには2つの主な使用例があります.1つは特定の種類の高次関数で、もう1つはreified型のパラメータです。インライン関数のドキュメントには、次のものが含まれています。https://kotlinlang.org/docs/reference/inline-functions.html – zsmb13
@ zsmb13ありがとうございます。私はそれを理解していません: "パラメータの関数オブジェクトを作成し、呼び出しを生成する代わりに、コンパイラは次のコードを発行することができます" –
私はその例をtbh得る。 –