...

/

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")
}
Log before and after executing a block of code

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 call
System.out.println(var1);
var1 = "Inlining";
System.out.println(var1);
var1 = "After";
System.out.println(var1);
Prints three strings, demonstrating inline function call

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 ...