Kotlin でのインライン関数の使用
ほとんどの Kotlin プロジェクトは高次関数を使用しているため、Kotlin プロジェクトでは問題になる可能性があります。 各高階関数はクラスのオブジェクトであるため、クロージャーが必要です。
これは、高階関数が呼び出されるたびにメモリ割り当てが必要であることを意味します。 したがって、高階関数を呼び出すたびに実行時のオーバーヘッドが発生します。
Kotlin は、この問題を解決するために inline
関数を提供します。 この記事では、Kotlin inline
関数の概念と、メモリ効率を向上させるためにそれらを使用できる場合について紹介します。
Kotlin inline
関数
Kotlin inline
関数はキーワード inline
を使用して宣言されます。 関数を宣言する直前にキーワードを記述する必要があります。
Kotlin inline
関数を使用すると、高階関数のメモリ効率が向上します。 inline
関数を使用すると、関数コードを呼び出しサイトにコピーするようにコンパイラに指示し、メモリ割り当てを防ぎます。
Kotlin の inline
関数の基本的な例を次に示します。
fun main(args: Array<String>) {
exampleFunc({ println("This function will call our inline function")})
}
inline fun exampleFunc(Func: () -> Unit ) {
Func()
print("This is an inline function call and doesn't require memory allocation")
}
出力:
inline
関数を使用しない場合
inline
関数は、より高度な関数をより効率的にするための優れた方法を提供しますが、次のような使用をサポートしない宣言やシナリオがいくつかあります。
- ローカルクラス宣言
- ネストされた内部クラス宣言
- 関数式
- ローカル関数宣言
- オプションパラメータのデフォルト値
inline
関数を使用する最適なシナリオ
inline
関数は、すべての状況で役立つわけではありません。 Kotlin inline
関数を使用する最適なシナリオは次のとおりです。
- 高次関数へのアクセス中
- メモリ割り当て効率を高めるには
- 関数型パラメータを渡す場合
- 制御フローを改善するには
- 関数が別の関数をパラメーターとして受け入れる場合
- 関数がパラメータとしてラムダを受け入れる場合
具体化された型パラメーターで Kotlin inline
関数を使用する
Kotlin inline
関数を使用して、呼び出し中に渡されたパラメーターのデータ型にアクセスして取得できます。 reified
修飾子を使用してそれを行うことができます。
fun main(args: Array<String>) {
exampleFunction<String>()
}
inline fun <reified S> exampleFunction() {
print(S::class)
}
出力:
Kotlin inline
関数で noinline
を使用する
関数 inline
を宣言すると、そのすべてのパラメーターは inline
になります。 ただし、一部のパラメーターのみを inline
にしたい場合は、noinline
修飾子を使用できます。
前に noinline
修飾子を使用するすべての式は非インライン化されます。
Kotlin inline
関数での noinline
の使用を理解するには、この例を検討してください。
fun main(args: Array<String>){
println("Start")
inlineFuncExample({ println("This is the first expression/parameter")
return }, // This will not throw an error as it is an inline expression
{ println("This is the first expression/parameter")
return } ) // This will throw an error as it is not an inline expression
println("End")
}
inline fun inlineFuncExample( para1: () -> Unit, noinline para2: () -> Unit ) {
para1()
para2()
}
出力:
Kailash Vaviya is a freelance writer who started writing in 2019 and has never stopped since then as he fell in love with it. He has a soft corner for technology and likes to read, learn, and write about it. His content is focused on providing information to help build a brand presence and gain engagement.
LinkedIn