📖 Scenario: You are building a small Kotlin program to understand how inline functions can improve performance by avoiding extra function calls.
🎯 Goal: Create a Kotlin program that uses an inline function to calculate the sum of two numbers and compare it with a normal function call.
📋 What You'll Learn
Create a normal function called add that takes two Int parameters and returns their sum.
Create an inline function called inlineAdd that takes two Int parameters and returns their sum.
Call both functions with the numbers 10 and 20 and store their results in variables.
Print the results of both function calls.
💡 Why This Matters
🌍 Real World
Inline functions are used in Kotlin to optimize performance, especially when passing lambda functions. This helps apps run faster and use less memory.
💼 Career
Understanding inline functions is important for Kotlin developers working on Android apps or backend services to write efficient and performant code.
Progress0 / 4 steps
1
Create a normal function to add two numbers
Write a normal function called add that takes two Int parameters named a and b and returns their sum.
Kotlin
Hint
Use the fun keyword to create a function named add. It should take two Int parameters and return their sum.
2
Create an inline function to add two numbers
Add an inline function called inlineAdd that takes two Int parameters named a and b and returns their sum.
Kotlin
Hint
Use the inline keyword before fun to create an inline function named inlineAdd.
3
Call both functions and store results
Call the add function with arguments 10 and 20 and store the result in a variable called normalResult. Then call the inlineAdd function with the same arguments and store the result in a variable called inlineResult.
Kotlin
Hint
Use val to create variables normalResult and inlineResult. Call the functions with 10 and 20.
4
Print the results of both function calls
Write two println statements to print the values of normalResult and inlineResult.
Kotlin
Hint
Use println(normalResult) and println(inlineResult) to show the results.
Practice
(1/5)
1. What is the main benefit of using inline functions in Kotlin?
easy
A. They automatically optimize memory usage for large data.
B. They allow functions to run asynchronously.
C. They enable functions to be called from Java code.
D. They reduce the overhead of function calls by copying code at call sites.
Solution
Step 1: Understand what inline functions do
Inline functions copy their code directly to the place where they are called, avoiding the usual function call overhead.
Step 2: Identify the main benefit
This copying reduces the overhead of calling small functions repeatedly, improving performance.
Final Answer:
They reduce the overhead of function calls by copying code at call sites. -> Option D
Quick Check:
Inline functions reduce call overhead [OK]
Hint: Inline means copy code to call site to run faster [OK]
Common Mistakes:
Thinking inline makes functions asynchronous
Believing inline optimizes memory for large data
Confusing inline with Java interoperability
2. Which of the following is the correct syntax to declare an inline function in Kotlin?
easy
A. fun inline myFunction() { println("Hello") }
B. inline fun myFunction() { println("Hello") }
C. fun myFunction() inline { println("Hello") }
D. fun myFunction() { inline println("Hello") }
Solution
Step 1: Recall Kotlin inline function syntax
The keyword inline must appear before fun in the function declaration.
Step 2: Check each option
inline fun myFunction() { println("Hello") } correctly places inline before fun. Others place it incorrectly or inside the function body.
Final Answer:
inline fun myFunction() { println("Hello") } -> Option B
Quick Check:
inline keyword before fun [OK]
Hint: inline keyword always comes before fun keyword [OK]
Common Mistakes:
Placing inline after fun keyword
Putting inline inside function body
Using inline as a function modifier incorrectly
3. What will be the output of the following Kotlin code?
inline fun greet(name: () -> String) {
println("Hello, ${name()}")
}
fun main() {
greet { "Alice" }
}
medium
A. Hello, Alice
B. Hello, name
C. Compilation error due to inline function
D. Hello, () -> String
Solution
Step 1: Understand the inline function call
The function greet takes a lambda returning a String and prints "Hello, " plus the lambda result.
Step 2: Evaluate the lambda passed
The lambda returns "Alice", so the print statement outputs "Hello, Alice".
Final Answer:
Hello, Alice -> Option A
Quick Check:
Lambda returns "Alice" so output is Hello, Alice [OK]
4. Identify the error in this Kotlin code using inline functions:
inline fun calculate(operation: () -> Int) {
return operation()
}
fun main() {
val result = calculate { 5 + 3 }
println(result)
}
medium
A. Cannot return a value from an inline function with Unit return type.
B. Inline functions cannot have return statements.
C. The function calculate should specify a return type.
D. Lambda passed to calculate must not return Int.
Solution
Step 1: Check function signature and return usage
The function calculate uses return operation() but does not declare a return type.
Step 2: Kotlin requires explicit return type if function returns a value
Since operation() returns Int, calculate must declare : Int as return type.
Final Answer:
The function calculate should specify a return type. -> Option C
Quick Check:
Function returns Int but lacks return type [OK]
Hint: Declare return type if function returns a value [OK]
Common Mistakes:
Assuming inline forbids return statements
Ignoring missing return type causes error
Thinking lambda return type is restricted
5. You want to improve performance by inlining a function that takes two lambdas: one for success and one for failure. Which Kotlin code correctly uses inline functions to avoid creating lambda objects and improve speed?
hard
A. inline fun process(success: () -> Unit, noinline failure: () -> Unit) {
success()
failure()
}
B. fun process(success: () -> Unit, failure: () -> Unit) {
success()
failure()
}
C. inline fun process(noinline success: () -> Unit, failure: () -> Unit) {
success()
failure()
}
D. inline fun process(success: () -> Unit, failure: () -> Unit) {
success()
failure()
}
Solution
Step 1: Understand inline with multiple lambdas
Inlining copies code of lambdas to call site, but lambdas marked noinline are not inlined and keep normal object overhead.
Step 2: Identify which lambdas to inline or not
To avoid creating lambda objects for the success lambda, it should be inlined. If failure lambda is large or stored, mark it noinline to avoid code bloat.
Step 3: Check options
inline fun process(success: () -> Unit, noinline failure: () -> Unit) {
success()
failure()
} correctly marks failure as noinline and success as inline, improving performance while controlling code size.
Final Answer:
inline fun process(success: () -> Unit, noinline failure: () -> Unit) {
success()
failure()
} -> Option A
Quick Check:
Use noinline for lambdas not to inline [OK]
Hint: Use noinline to exclude lambdas from inlining [OK]
Common Mistakes:
Inlining all lambdas causing code bloat
Not using noinline for stored lambdas
Forgetting to mark function inline
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.