Kotlinのインライン関数

私はアミット・シェーカーです。開発者が高給のテクノロジーの仕事を得る助けをしています。

始める前に、アンドロイド面接を突破する手助けとなるビデオプレイリストをリリースしたことをお伝えしたいと思います。Android面接の質問と回答をチェックしてみてください。

このブログでは、Kotlinのinline関数について学びます。

この記事はもともとamitshekhar.meに公開されました。

Kotlinのinline関数とは何か?

Inline関数はコンパイラに指示して、その関数がコード内で使用されている部分に関数の完全なボディを挿入するよう指示します。

例で理解しましょう:

fun guide() {
    print("guide start")
    teach()
    print("guide end")
}

fun teach() {
    print("teach")
}

この例では、2つの関数があります:

  • guide()
  • teach()

どちらも通常の関数です。guide()関数はteach()関数を呼び出しています。

デコンパイルされたコードを見て理解しましょう。

そのためには、このKotlinのソースファイルをJavaのソースファイルに変換する必要があります。

KotlinのソースファイルからJavaのソースファイルへの変換とAndroid Studioでのデコンパイル手順:

  • ツール > Kotlin > Kotlinバイトコードを表示。Kotlinファイルのバイトコードが得られます。
  • その後、デコンパイルボタンをクリックして、バイトコードからJavaコードを得ます。

以下が得られることでしょう:

public void guide() {
   System.out.print("guide start");
   teach();
   System.out.print("guide end");
}

public void teach() {
   System.out.print("teach");
}

ここでは、guide()関数が通常どおりteach()関数を呼び出しているのがわかります。

それでは、teach()関数にinlineキーワードを追加しましょう。

fun guide() {
    print("guide start")
    teach()
    print("guide end")
}

inline fun teach() {
    print("teach")
}

もう一度デコンパイルされたコードを見てみましょう。デコンパイルされたコードは以下の通りです:

public void guide() {
   System.out.print("guide start");
   System.out.print("teach");
   System.out.print("guide end");
}

ここで、teach()関数のコードがguide()関数の内部にコピーされていることがわかります。そして、guide()関数はもはやteach()関数を呼び出していません。

これはinlineキーワードを使用したためです。

Inline関数の利点:関数呼び出しのオーバーヘッドが生じない。オーバーヘッドが少なく、プログラム実行がより迅速です。

では、いつ関数をinlineにすべきで、いつすべきでないか:

  • 関数のコードが非常に小さいときは、関数をinlineにするのが良い考えです。
  • 関数のコードが大きくて多くの場所から呼び出される場合は、inlineにするのは良い考えではありません。大きなコードが何度も繰り返されることになります。

これで、Kotlinにおけるinlineキーワードについて理解しました。

noinline について学ぶ:Kotlinのnoinline

crossinline について学ぶ:Kotlinのcrossinline

動画形式を見る:Kotlinのinline関数

ここからKotlinコルーチンをマスターする:Kotlinコルーチンの習得

今回はこれで終わりです。

ありがとうございます。

アミット・シェーカー

私と繋がることができます:

私の高品質なブログをここで読んでください。

こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/amitiitbhu/inline-function-in-kotlin-ebe