...
/Inline Functions and Implementing Algebraic Data Types
Inline Functions and Implementing Algebraic Data Types
Learn about the inline functions in Kotlin and how to implement Algebraic Data Types.
We'll cover the following...
We can think of inline
functions as instructions for the compiler to copy and paste our code. Each time the compiler sees a call to a function marked with the inline
keyword, it will replace the call with the concrete function body.
It makes sense to use the inline
function if it’s a higher-order function that receives a lambda as one of its arguments. This is the most common use case where we’d want to use inline
.
Let’s look at such a higher-order function and see what pseudocode the compiler will output.
First, here is the function definition:
inline fun logBeforeAfter(block: () -> String) {println("Before")println(block())println("After")}
Here, we pass a lambda, or a block
, to our function. This block
simply returns the word "Inlining"
as a String
:
logBeforeAfter { "Inlining" }
If we were to view the Java equivalent of the decompiled bytecode, we would see that there’s no call to our makesSense
function at all. Instead, we’d see the following:
String var1 = "Before"; <- Inline function callSystem.out.println(var1);var1 = "Inlining";System.out.println(var1);var1 = "After";System.out.println(var1);
Since the inline
function is a copy/paste of our code, we shouldn’t use it if we have more than a few lines of code. It would be more efficient to have it as a regular function. But if we have ...